Speed Booster Pack - Version 3.7.3

Version Description

  • minor backend tweaks
Download this release

Release Info

Developer machothemes
Plugin Icon 128x128 Speed Booster Pack
Version 3.7.3
Comparing to
See all releases

Code changes from version 3.6.1 to 3.7.3

Files changed (45) hide show
  1. css/dynamic-css.php +0 -111
  2. css/jquery-ui.min.css +0 -7
  3. css/sbp_style.min.css +0 -1
  4. css/style.css +926 -0
  5. css/style.dev.css +0 -622
  6. css/vendors/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  7. css/vendors/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  8. css/vendors/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  9. css/vendors/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  10. css/vendors/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  11. css/vendors/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  12. css/vendors/jquery-ui/jquery-ui.min.css +7 -0
  13. feedback/class-epsilon-feedback.php +271 -0
  14. feedback/class-epsilon-plugin-request.php +225 -0
  15. inc/core.php +610 -537
  16. inc/crazy-lazy.class.php +172 -172
  17. inc/crazy-lazy.php +37 -37
  18. inc/css-optimizer.php +227 -203
  19. inc/images/icon-128x128.jpg +0 -0
  20. inc/images/icon-16x16.png +0 -0
  21. inc/images/sp.png +0 -0
  22. inc/js/admin-scripts.js +100 -0
  23. inc/js/jquery.unveil.js +71 -71
  24. inc/js/jquery.unveil.min.js +11 -11
  25. inc/js/lazyload.js +90 -90
  26. inc/js/lazyload.min.js +7 -7
  27. inc/js/plugin-install.js +55 -0
  28. inc/js/post-tabs-edit.js +0 -9
  29. inc/js/sbp-hide.js +0 -16
  30. inc/js/sbp-slide.js +0 -13
  31. inc/sbp-minifier.php +120 -119
  32. inc/settings.php +290 -324
  33. inc/template/notice.php +17 -17
  34. inc/template/options.php +579 -444
  35. inc/use-google-libraries.php +504 -492
  36. lang/es_ES.mo +0 -0
  37. lang/es_ES.po +0 -372
  38. lang/ro_RO.mo +0 -0
  39. lang/ro_RO.po +0 -374
  40. lang/sb-pack.mo +0 -0
  41. lang/sb-pack.po +0 -339
  42. lang/sb-pack.pot +0 -339
  43. readme.txt +246 -206
  44. speed-booster-pack.php +281 -291
  45. widgets/dashboard-widget.php +70 -0
css/dynamic-css.php DELETED
@@ -1,111 +0,0 @@
1
- <style type="text/css">
2
-
3
- /*progress-bar-time*/
4
-
5
- @-webkit-keyframes progress-bar-time {
6
- from { }
7
- to { width: 5<?php echo $page_time; ?>% }
8
- }
9
-
10
- @-moz-keyframes progress-bar-time {
11
- from { }
12
- to { width: 5<?php echo $page_time; ?>% }
13
- }
14
-
15
- @-ms-keyframes progress-bar-time {
16
- from { }
17
- to { width: 5<?php echo $page_time; ?>% }
18
- }
19
-
20
- @-o-keyframes progress-bar-time {
21
- from { }
22
- to { width: 5<?php echo $page_time; ?>% }
23
- }
24
-
25
- @keyframes progress-bar-time {
26
- from { }
27
- to { width: 5<?php echo $page_time; ?>% }
28
- }
29
-
30
- /*progress-bar-queries*/
31
-
32
- @-webkit-keyframes progress-bar-queries {
33
- from { }
34
- to { width: <?php echo $page_queries; ?>% }
35
- }
36
-
37
- @-moz-keyframes progress-bar-queries {
38
- from { }
39
- to { width: <?php echo $page_queries; ?>% }
40
- }
41
-
42
- @-ms-keyframes progress-bar-queries {
43
- from { }
44
- to { width: <?php echo $page_queries; ?>% }
45
- }
46
-
47
- @-o-keyframes progress-bar-queries {
48
- from { }
49
- to { width: <?php echo $page_queries; ?>% }
50
- }
51
-
52
- @keyframes progress-bar-queries {
53
- from { }
54
- to { width: <?php echo $page_queries; ?>% }
55
- }
56
-
57
- <?php
58
-
59
- if ( $page_time >=1.00 and $page_time <=2.00 ) { ?>
60
-
61
- .wrap .sbp-progress.time > span {
62
- background-color: #f1a165;
63
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f1a165),color-stop(1, #f36d0a));
64
- background-image: -webkit-linear-gradient(top, #f1a165, #f36d0a);
65
- background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
66
- background-image: -ms-linear-gradient(top, #f1a165, #f36d0a);
67
- background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
68
- }
69
-
70
- <?php }
71
-
72
- if ( $page_time >=2.00 ) { ?>
73
- .wrap .sbp-progress.time > span {
74
- background-color: #FB8A88;
75
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #FB8A88),color-stop(1, #FF4136));
76
- background-image: -webkit-linear-gradient(top, #FB8A88, #FF4136);
77
- background-image: -moz-linear-gradient(top, #FB8A88, #FF4136);
78
- background-image: -ms-linear-gradient(top, #FB8A88, #FF4136);
79
- background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
80
- }
81
-
82
- <?php }
83
-
84
- if ( $page_queries >=100 and $page_queries <=200 ) { ?>
85
-
86
- .wrap .sbp-progress.queries > span {
87
- background-color: #f1a165;
88
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f1a165),color-stop(1, #f36d0a));
89
- background-image: -webkit-linear-gradient(top, #f1a165, #f36d0a);
90
- background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
91
- background-image: -ms-linear-gradient(top, #f1a165, #f36d0a);
92
- background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
93
- }
94
-
95
- <?php }
96
-
97
- if ( $page_queries >=200 ) { ?>
98
- .wrap .sbp-progress.queries > span {
99
- background-color: #FB8A88;
100
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #FB8A88),color-stop(1, #FF4136));
101
- background-image: -webkit-linear-gradient(top, #FB8A88, #FF4136);
102
- background-image: -moz-linear-gradient(top, #FB8A88, #FF4136);
103
- background-image: -ms-linear-gradient(top, #FB8A88, #FF4136);
104
- background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
105
- }
106
-
107
- <?php }
108
-
109
- ?>
110
-
111
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/jquery-ui.min.css DELETED
@@ -1,7 +0,0 @@
1
- /*! jQuery UI - v1.11.0 - 2014-06-26
2
- * http://jqueryui.com
3
- * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
5
- * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
-
7
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
 
 
 
 
 
 
 
css/sbp_style.min.css DELETED
@@ -1 +0,0 @@
1
- .postbox,.wrap .sb-pack .sbp-box{position:relative;overflow:hidden}.wrap .sb-pack .welcome-panel .welcome-panel-column:first-child{display:block!important}.wrap .sb-pack .welcome-panel h4{margin:1.33em 0 20px}.wrap .sb-pack .sbp-inline-wrap{display:inline-block;margin-right:10px;vertical-align:top}.wrap .sb-pack .sbp-more-width{width:300px}.wrap .sb-pack input[type=text]{line-height:1.3}.wrap .sb-pack .sbp-all-enqueued{background-color:#FCFCFC;padding:5px 0 10px;border:1px solid #ddd;width:auto}.wrap .sb-pack .sbp-title-scripts,.wrap .sb-pack .sbp-width{min-width:200px;width:auto;padding:0 20px}.wrap .sb-pack .sbp-title-scripts{display:inline-block;font-weight:700}.wrap .sb-pack #poststuff h2{font-size:32px;padding:9px 15px 20px 0;font-weight:700;line-height:1.3}.wrap .sb-pack #poststuff .main-sbp-title h3{font-size:24px;padding:8px 0 20px;font-weight:700;color:#FA5148}.wrap .sb-pack .handlediv{color:#80828F;padding: 10px 0 0;cursor:pointer}.wrap .sb-pack .meta-box-sortables .postbox .handlediv:before{right:20px;font:400 30px/1.2 dashicons;padding:8px 0;content:"\f343"}.wrap .sb-pack .meta-box-sortables .postbox.closed .handlediv:before{content:"\f347"}.wrap .sb-pack .postbox .inside{padding:0 20px 20px}.wrap .sb-pack #poststuff .inside{margin:26px 0 0}.wrap .sb-pack #poststuff h3{font-size:24px;padding:8px 20px;font-weight:700;display:inline-block}.wrap .sb-pack .sbp-columns1{display:inline-block}.wrap .sb-pack .sbp-columns2{display:inline-block;max-width:73%}.wrap .sb-pack .sbp-title-div{height:50px;clear:both}.wrap .sb-pack .sbp-amount{background-color:transparent;border:none;box-shadow:none;font-size:16px}.wrap .sb-pack .sbp-slider{width:40%}.wrap .sb-pack p{color:#464646;line-height:1.6}.wrap .sb-pack .debug-info{margin-top:19px;border:1px solid #1A9E51;padding:17px 10px;background-color:#2DCB73;color:#FFF;font-size:16px;line-height:1.6;text-shadow:1px 1px #1A9E51}.wrap .sb-pack .td-margin{margin:1.5em 0}.wrap .sb-pack .sbp-div-head{border-bottom:1px solid #E1E1E1;margin:0 0 5px;padding:0 0 5px}.wrap .sb-pack .td-border{border-bottom:1px solid #E1E1E1;margin:10px 0}.wrap .sb-pack .td-border-last{border-bottom:1px solid #E1E1E1;margin:1.5em 0}.wrap .sb-pack .sbp-radio-content{display:block}.wrap .sb-pack .sbp-radio-content label{display:block!important}.wrap .sb-pack .sbp-box hr{margin-left:70px}.wrap .sb-pack .sbp-1{padding-top:10px}.wrap .sb-pack .sbp-2{padding-bottom:15px}.wrap .sb-pack .sbp-3{padding-top:5px}.wrap .sb-pack .sbp-title-div .sbp-title{font-size:23px;font-weight:300;line-height:26px;padding-top:16px;padding-right:15px;display:block;float:left}.wrap .sb-pack .sbp-box{background:#fff;border:1px solid #E5E5E5;box-shadow:0 1px 1px rgba(0,0,0,.04);padding:15px;margin-bottom:15px}.wrap .sb-pack .ui-widget-content,.wrap .sb-pack label:before{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.wrap .sb-pack .sbp-box p{margin:5px 0 5px 70px;color:#777}.wrap .sb-pack .sbp-infos{display:block;margin:0 auto;padding-left:70px;font-weight:700;color:#777}.wrap .sb-pack .sbp-infos span{color:#777;font-weight:400}.wrap .sb-pack .sbp-infos-title{font-weight:700;color:#777}.wrap .sb-pack .sbp-box-legend,.wrap .sb-pack .sbp-box-version{position:absolute;left:0;top:0;height:100%}.wrap .sb-pack .sbp-box-version{background:#80828F;padding:20px 15px}.wrap .sb-pack .sbp-box-legend{background:#FCC500;padding:15px}.wrap .sb-pack .sbp-box-legend:hover{background-color:#F39C12}.wrap .sb-pack .sbp-box-version:hover{background-color:#6C6E79}.wrap .sb-pack .sbp-icon-help,.wrap .sb-pack .sbp-icon-version{color:#FFF;font-size:25px}.wrap .sb-pack .sbp-icon:before{content:"\f185";display:inline-block;-webkit-font-smoothing:antialiased;font:400 36px/.6 dashicons;vertical-align:sub;color:#FA5148;padding-right:5px}.wrap .sb-pack .sbp-icon-information:before{content:"\f348";display:inline-block;-webkit-font-smoothing:antialiased;font:400 28px/1 dashicons;vertical-align:middle;color:#C9D6E2;padding-right:5px}.wrap .sb-pack label{display:inline-block;cursor:pointer;position:relative;padding-left:35px;font-size:16px}.wrap .sb-pack label:before{content:"\2717";font-size:16px;-webkit-font-smoothing:antialiased;text-align:center;color:#fff;display:inline-block;width:26px;height:26px;margin-right:10px;position:absolute;left:0;background:#C9D6E2;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);border:1px solid #B2BFCA}.wrap .sb-pack input[type=checkbox],.wrap .sb-pack input[type=radio]{display:none}.wrap .sb-pack input[type=checkbox]:checked+label:before{content:"\2714";background:#2DCB73;text-shadow:1px 1px 1px #148D44;border:1px solid #1A9E51;font-size:16px;-webkit-font-smoothing:antialiased;color:#fff;text-align:center}.wrap .sb-pack .sbp-icon-version:before{content:"\f348";display:inline-block;-webkit-font-smoothing:antialiased;font:400 30px/1 dashicons;vertical-align:top}.wrap .sb-pack .sbp-icon-help:before{content:"\f123";display:inline-block;-webkit-font-smoothing:antialiased;font:400 30px/1 dashicons;vertical-align:top}.wrap .sb-pack .sbp-stats{font-size:16px;line-height:1.5}.wrap .sb-pack .ui-widget-content .ui-state-default,.wrap .sb-pack .ui-widget-header .ui-state-default,.wrap .sb-pack.ui-state-default{border:1px solid #1A9E51;background-color:#2DCB73;font-weight:400;color:#555;outline:0;cursor:pointer}.wrap .sb-pack .ui-corner-all,.wrap .sb-pack .ui-corner-bl,.wrap .sb-pack .ui-corner-bottom,.wrap .sb-pack .ui-corner-left{border-bottom-left-radius:0}.wrap .sb-pack .ui-state-default:before,.wrap .sb-pack .ui-widget-content .ui-state-default:before,.wrap .sb-pack .ui-widget-header .ui-state-default:before{content:"\2630";display:inline-block;-webkit-font-smoothing:antialiased;color:#fff;font-weight:700;text-shadow:0 1px #1A9E51;line-height:1.8em}.wrap .sb-pack .ui-state-default a,.wrap .sb-pack .ui-state-default a:link,.wrap .sb-pack .ui-state-default a:visited{color:#fff;text-decoration:none}.wrap .sb-pack .ui-state-focus,.wrap .sb-pack .ui-state-hover,.wrap .sb-pack .ui-widget-content .ui-state-focus,.wrap .sb-pack .ui-widget-content .ui-state-hover,.wrap .sb-pack .ui-widget-header .ui-state-focus,.wrap .sb-pack .ui-widget-header .ui-state-hover{background:#3CE281}.wrap .sb-pack .ui-corner-all,.wrap .sb-pack .ui-corner-left,.wrap .sb-pack .ui-corner-tl,.wrap .sb-pack .ui-corner-top{border-top-left-radius:0}.wrap .sb-pack .ui-corner-all,.wrap .sb-pack .ui-corner-right,.wrap .sb-pack .ui-corner-top,.wrap .sb-pack .ui-corner-tr{border-top-right-radius:0}.wrap .sb-pack .ui-corner-all,.wrap .sb-pack .ui-corner-bottom,.wrap .sb-pack .ui-corner-br,.wrap .sb-pack .ui-corner-right{border-bottom-right-radius:0}.wrap .sb-pack .ui-slider-horizontal{height:1.3em}.wrap .sb-pack .ui-slider .ui-slider-handle{width:1.8em;height:1.8em;cursor:pointer;text-align:center}.wrap .sb-pack .ui-widget-content{box-shadow:inset 0 1px 2px rgba(0,0,0,.1);border:1px solid #B2BFCA;background:#F1F2F7;color:#222}.wrap .sb-pack .sbp-progress.queries,.wrap .sb-pack .sbp-progress.time{height:30px;width:77%;display:inline-block;position:relative;background-color:#F1F2F7;overflow:hidden;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.wrap .sbp-progress.queries>span,.wrap .sbp-progress.time>span{background-color:#7EDBA5;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#7EDBA5),color-stop(1,#2DCB73));background-image:-webkit-linear-gradient(top,#7EDBA5,#2DCB73);background-image:-moz-linear-gradient(top,#7EDBA5,#2DCB73);background-image:-ms-linear-gradient(top,#7EDBA5,#2DCB73);background-image:-o-linear-gradient(top,#7EDBA5,#f36d0a);color:#fff;width:0;max-width:98%;float:left;display:block;height:100%;position:relative;overflow:hidden}.wrap .sb-pack .sbp-progress.time>span{-webkit-animation:progress-bar-time 2s 1 forwards;-moz-animation:progress-bar-time 2s 1 forwards;-ms-animation:progress-bar-time 2s 1 forwards;-o-animation:progress-bar-time 2s 1 forwards;animation:progress-bar-time 2s 1 forwards}.wrap .sb-pack .sbp-progress.queries>span{-webkit-animation:progress-bar-queries 2s 1 forwards;-moz-animation:progress-bar-queries 2s 1 forwards;-ms-animation:progress-bar-queries 2s 1 forwards;-o-animation:progress-bar-queries 2s 1 forwards;animation:progress-bar-queries 2s 1 forwards}.wrap .sb-pack .sbp-values{float:right;padding:0 5px;background-color:#1AB4EF;color:#fff;width:18%;height:30px;line-height:30px;text-align:center;text-shadow:0 -2px #1AB4EF}.wrap .sb-pack .sbp-numbers{-webkit-animation:opacity 2s;-moz-animation:opacity 2s;-ms-animation:opacity 2s;-o-animation:opacity 2s;animation:opacity 2s;transition-delay:2s;-moz-transition-delay:2s;-webkit-transition-delay:2s;-o-transition-delay:2s;font-size:16px}@keyframes opacity{from{opacity:0}to{opacity:1}}@-moz-keyframes opacity{from{opacity:0}to{opacity:1}}@-webkit-keyframes opacity{from{opacity:0}to{opacity:1}}@-ms-keyframes opacity{from{opacity:0}to{opacity:1}}​ @-o-keyframes opacity{from{opacity:0}to{opacity:1}}​ @media screen and (max-width:783px){.wrap .sb-pack input.regular-text{width:14em}}@media screen and (min-width:784px){.wrap .sb-pack input.regular-text{width:45em}}
 
css/style.css ADDED
@@ -0,0 +1,926 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* `border-box`... ALL THE THINGS! */
2
+ html {
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ *,
7
+ *:before,
8
+ *:after {
9
+ box-sizing: inherit;
10
+ }
11
+
12
+ .sb-pack-show {
13
+ display: block;
14
+ }
15
+
16
+ .sb-pack-hide {
17
+ display: none;
18
+ }
19
+
20
+ h3.sbp-emphasize {
21
+ color: #fa5148;
22
+ }
23
+
24
+ img.sbp-sp {
25
+ float: left;
26
+ margin-right: 20px;
27
+ }
28
+
29
+ p.description-link {
30
+ margin-top: -5px;
31
+ }
32
+
33
+ .wrap .sb-pack .welcome-panel .welcome-panel-column:first-child {
34
+ display: block !important;
35
+ }
36
+
37
+ .wrap .sb-pack .welcome-panel h4 {
38
+ margin: 1.33em 0 20px;
39
+ }
40
+
41
+ .wrap .sb-pack .sbp-inline-wrap {
42
+ display: inline-block;
43
+ margin-right: 10px;
44
+ vertical-align: top;
45
+ }
46
+
47
+ .wrap .sb-pack .sbp-more-width {
48
+ width: 300px;
49
+ }
50
+
51
+ .wrap .sb-pack .sbp-all-enqueued {
52
+ background-color: #fcfcfc;
53
+ padding: 5px 0px 10px;
54
+ border: 1px solid #ddd;
55
+ width: auto;
56
+ }
57
+
58
+ .wrap .sb-pack .sbp-width {
59
+ min-width: 200px;
60
+ width: auto;
61
+ padding: 0 20px;
62
+ }
63
+
64
+ .wrap .sb-pack .sbp-title-scripts {
65
+ min-width: 200px;
66
+ width: auto;
67
+ display: inline-block;
68
+ font-weight: 700;
69
+ padding: 0 20px;
70
+ }
71
+
72
+ .wrap .sb-pack .sbp-columns1 {
73
+ display: inline-block;
74
+ }
75
+
76
+ .wrap .sb-pack .sbp-columns2 {
77
+ display: inline-block;
78
+ max-width: 73%;
79
+ }
80
+
81
+ .wrap .sb-pack .sbp-title-div {
82
+ height: 50px;
83
+ clear: both;
84
+ }
85
+
86
+ .wrap .sb-pack .sbp-amount {
87
+ background-color: transparent;
88
+ border: medium none;
89
+ box-shadow: none;
90
+ }
91
+
92
+ .wrap .sb-pack .sbp-slider {
93
+ width: 40%;
94
+ }
95
+
96
+ .wrap .sb-pack p {
97
+ color: #464646;
98
+ }
99
+
100
+ .wrap .sb-pack p.sp-link {
101
+ text-align: center;
102
+ margin-bottom: 20px;
103
+ }
104
+
105
+ .wrap .sb-pack .td-margin {
106
+ margin: 1.5em 0 1.5em;
107
+ }
108
+
109
+ .wrap .sb-pack .sbp-div-head {
110
+ border-bottom: 1px solid #e1e1e1;
111
+ margin: 0 0 5px;
112
+ padding: 0 0 5px;
113
+ }
114
+
115
+ .wrap .sb-pack .td-border {
116
+ border-bottom: 1px solid #e1e1e1;
117
+ margin: 10px 0;
118
+ }
119
+
120
+ .wrap .sb-pack .td-border-last {
121
+ border-bottom: 1px solid #e1e1e1;
122
+ margin: 1.5em 0;
123
+ }
124
+
125
+ .wrap .sb-pack .sbp-radio-content {
126
+ display: block;
127
+ }
128
+
129
+ .wrap .sb-pack .sbp-radio-content label {
130
+ display: block !important;
131
+ }
132
+
133
+ .wrap .sb-pack .sbp-box hr {
134
+ margin-left: 70px;
135
+ }
136
+
137
+ .wrap .sb-pack .sbp-1 {
138
+ padding-top: 10px;
139
+ }
140
+
141
+ .wrap .sb-pack .sbp-2 {
142
+ padding-bottom: 15px;
143
+ }
144
+
145
+ .wrap .sb-pack .sbp-3 {
146
+ padding-top: 5px;
147
+ }
148
+
149
+ .wrap .sb-pack .sbp-title-div .sbp-title {
150
+ font-weight: 300;
151
+ line-height: 26px;
152
+ padding-top: 16px;
153
+ padding-right: 15px;
154
+ display: block;
155
+ float: left;
156
+ }
157
+
158
+ .wrap .sb-pack .sbp-box {
159
+ background: #fff;
160
+ border: 1px solid #e5e5e5;
161
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
162
+ padding: 15px;
163
+ margin-bottom: 15px;
164
+ position: relative;
165
+ overflow: hidden;
166
+ }
167
+
168
+ .wrap .sb-pack .sbp-box p {
169
+ margin: 5px 0 5px 70px;
170
+ color: #777;
171
+ }
172
+
173
+ .wrap .sb-pack .sbp-infos {
174
+ display: block;
175
+ margin: 0 auto;
176
+ padding-left: 70px;
177
+ font-weight: 700;
178
+ color: #777;
179
+ }
180
+
181
+ .wrap .sb-pack .sbp-infos span {
182
+ color: #777;
183
+ font-weight: 400;
184
+ }
185
+
186
+ .wrap .sb-pack .sbp-infos-title {
187
+ font-weight: 700;
188
+ color: #777;
189
+ }
190
+
191
+ .wrap .sb-pack .sbp-box-legend, .wrap .sb-pack .sbp-box-version {
192
+ position: absolute;
193
+ left: 0;
194
+ top: 0;
195
+ height: 100%;
196
+ }
197
+
198
+ .wrap .sb-pack .sbp-box-version {
199
+ background: none repeat scroll 0% 0% #80828f;
200
+ padding: 20px 15px;
201
+ }
202
+
203
+ .wrap .sb-pack .sbp-box-legend {
204
+ background: none repeat scroll 0% 0% #fcc500;
205
+ padding: 15px 15px;
206
+ }
207
+
208
+ .wrap .sb-pack .sbp-box-legend:hover {
209
+ background-color: #f39c12;
210
+ }
211
+
212
+ .wrap .sb-pack .sbp-box-version:hover {
213
+ background-color: #6c6e79;
214
+ }
215
+
216
+ .wrap .sb-pack .sbp-icon-help, .wrap .sb-pack .sbp-icon-version {
217
+ color: #fff;
218
+ }
219
+
220
+ .wrap .sb-pack .sbp-icon:before {
221
+ content: "\f185";
222
+ display: inline-block;
223
+ -webkit-font-smoothing: antialiased;
224
+ font: normal 36px/0.6 'dashicons';
225
+ vertical-align: sub;
226
+ color: #fa5148;
227
+ padding-right: 5px;
228
+ }
229
+
230
+ .wrap .sb-pack .sbp-icon-information:before {
231
+ content: "\f348";
232
+ display: inline-block;
233
+ -webkit-font-smoothing: antialiased;
234
+ font: normal 28px/1 'dashicons';
235
+ vertical-align: middle;
236
+ color: #c9d6e2;
237
+ padding-right: 5px;
238
+ }
239
+
240
+ .wrap .sb-pack .sbp-icon-version:before {
241
+ content: "\f348";
242
+ display: inline-block;
243
+ -webkit-font-smoothing: antialiased;
244
+ font: normal 30px/1 'dashicons';
245
+ vertical-align: top;
246
+ }
247
+
248
+ .wrap .sb-pack .sbp-icon-help:before {
249
+ content: "\f123";
250
+ display: inline-block;
251
+ -webkit-font-smoothing: antialiased;
252
+ font: normal 30px/1 'dashicons';
253
+ vertical-align: top;
254
+ }
255
+
256
+ /* Jquery UI slider
257
+ -------------------------------------------------------------- */
258
+
259
+ .wrap .sb-pack.ui-state-default,
260
+ .wrap .sb-pack .ui-widget-content .ui-state-default,
261
+ .wrap .sb-pack .ui-widget-header .ui-state-default {
262
+ border: 1px solid #1a9e51;
263
+ background-color: #2dcb73;
264
+ font-weight: 400;
265
+ color: #555;
266
+ outline: 0 none;
267
+ cursor: pointer;
268
+ }
269
+
270
+ .wrap .sb-pack .ui-state-default:before,
271
+ .wrap .sb-pack .ui-widget-content .ui-state-default:before,
272
+ .wrap .sb-pack .ui-widget-header .ui-state-default:before {
273
+ content: "\2630";
274
+ display: inline-block;
275
+ -webkit-font-smoothing: antialiased;
276
+ color: #fff;
277
+ font-weight: 700;
278
+ text-shadow: 0 1px #1a9e51;
279
+ line-height: 1.8em;
280
+ }
281
+
282
+ .wrap .sb-pack .ui-state-default a,
283
+ .wrap .sb-pack .ui-state-default a:link,
284
+ .wrap .sb-pack .ui-state-default a:visited {
285
+ color: #fff;
286
+ text-decoration: none;
287
+ }
288
+
289
+ .wrap .sb-pack .ui-state-focus,
290
+ .wrap .sb-pack .ui-state-hover,
291
+ .wrap .sb-pack .ui-widget-content .ui-state-focus,
292
+ .wrap .sb-pack .ui-widget-content .ui-state-hover,
293
+ .wrap .sb-pack .ui-widget-header .ui-state-focus,
294
+ .wrap .sb-pack .ui-widget-header .ui-state-hover {
295
+ background: #3ce281;
296
+ }
297
+
298
+ .wrap .sb-pack .ui-corner-all,
299
+ .wrap .sb-pack .ui-corner-top,
300
+ .wrap .sb-pack .ui-corner-left,
301
+ .wrap .sb-pack .ui-corner-tl {
302
+ border-top-left-radius: 0;
303
+ }
304
+
305
+ .wrap .sb-pack .ui-corner-all,
306
+ .wrap .sb-pack .ui-corner-top,
307
+ .wrap .sb-pack .ui-corner-right,
308
+ .wrap .sb-pack .ui-corner-tr {
309
+ border-top-right-radius: 0;
310
+ }
311
+
312
+ .wrap .sb-pack .ui-corner-bottom,
313
+ .wrap .sb-pack .ui-corner-left,
314
+ .wrap .sb-pack .ui-corner-bl {
315
+ border-bottom-left-radius: 0;
316
+ }
317
+
318
+ .wrap .sb-pack .ui-corner-all,
319
+ .wrap .sb-pack .ui-corner-bottom,
320
+ .wrap .sb-pack .ui-corner-right,
321
+ .wrap .sb-pack .ui-corner-br {
322
+ border-bottom-right-radius: 0;
323
+ }
324
+
325
+ .wrap .sb-pack .ui-corner-all,
326
+ .wrap .sb-pack .ui-corner-bottom,
327
+ .wrap .sb-pack .ui-corner-left,
328
+ .wrap .sb-pack .ui-corner-bl {
329
+ border-bottom-left-radius: 0;
330
+ }
331
+
332
+ .wrap .sb-pack .ui-slider-horizontal {
333
+ height: 1.3em;
334
+ }
335
+
336
+ .wrap .sb-pack .ui-slider .ui-slider-handle {
337
+ width: 1.8em;
338
+ height: 1.8em;
339
+ cursor: pointer;
340
+ text-align: center;
341
+ }
342
+
343
+ .wrap .sb-pack .ui-widget-content {
344
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
345
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
346
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
347
+ border: 1px solid #b2bfca;
348
+ background: #f1f2f7;
349
+ color: #222
350
+ }
351
+
352
+ /* Progress Bars
353
+ -------------------------------------------------------------- */
354
+ .wrap .sb-pack .sbp-progress.time,
355
+ .wrap .sb-pack .sbp-progress.queries {
356
+ height: 30px;
357
+ width: 77%;
358
+ display: inline-block;
359
+ position: relative;
360
+ background-color: #f1f2f7;
361
+ overflow: hidden;
362
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
363
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
364
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
365
+ }
366
+
367
+ .wrap .sbp-progress.time > span,
368
+ .wrap .sbp-progress.queries > span {
369
+ background-color: #7edba5;
370
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #7edba5), color-stop(1, #2dcb73));
371
+ background-image: -webkit-linear-gradient(top, #7edba5, #2dcb73);
372
+ background-image: -moz-linear-gradient(top, #7edba5, #2dcb73);
373
+ background-image: -ms-linear-gradient(top, #7edba5, #2dcb73);
374
+ background-image: -o-linear-gradient(top, #7edba5, #f36d0a);
375
+ color: #fff;
376
+ width: 0%;
377
+ max-width: 98%;
378
+ float: left;
379
+ display: block;
380
+ height: 100%;
381
+ position: relative;
382
+ overflow: hidden;
383
+ }
384
+
385
+ .wrap .sb-pack .sbp-progress.time > span {
386
+ -webkit-animation: progress-bar-time 2s 1 forwards;
387
+ -moz-animation: progress-bar-time 2s 1 forwards;
388
+ -ms-animation: progress-bar-time 2s 1 forwards;
389
+ -o-animation: progress-bar-time 2s 1 forwards;
390
+ animation: progress-bar-time 2s 1 forwards;
391
+ }
392
+
393
+ .wrap .sb-pack .sbp-progress.queries > span {
394
+ -webkit-animation: progress-bar-queries 2s 1 forwards;
395
+ -moz-animation: progress-bar-queries 2s 1 forwards;
396
+ -ms-animation: progress-bar-queries 2s 1 forwards;
397
+ -o-animation: progress-bar-queries 2s 1 forwards;
398
+ animation: progress-bar-queries 2s 1 forwards;
399
+ }
400
+
401
+ .wrap .sb-pack .sbp-values {
402
+ float: right;
403
+ padding: 0 5px;
404
+ background-color: #1ab4ef;
405
+ color: #fff;
406
+ width: 18%;
407
+ height: 30px;
408
+ line-height: 30px;
409
+ text-align: center;
410
+ text-shadow: 0px -2px #1ab4ef;
411
+ }
412
+
413
+ .wrap .sb-pack .sbp-numbers {
414
+ -webkit-animation: opacity 2s; /* Safari and Chrome */
415
+ -moz-animation: opacity 2s; /* Firefox */
416
+ -ms-animation: opacity 2s; /* Internet Explorer */
417
+ -o-animation: opacity 2s; /* Opera */
418
+ animation: opacity 2s;
419
+ transition-delay: 2s;
420
+ -moz-transition-delay: 2s; /* Firefox 4 */
421
+ -webkit-transition-delay: 2s; /* Safari and Chrome */
422
+ -o-transition-delay: 2s; /* Opera */
423
+ }
424
+
425
+ @keyframes opacity {
426
+ from { opacity: 0; }
427
+ to { opacity: 1; }
428
+ }
429
+
430
+ /* Firefox */
431
+ @-moz-keyframes opacity {
432
+ from { opacity: 0; }
433
+ to { opacity: 1; }
434
+ }
435
+
436
+ /* Safari and Chrome */
437
+ @-webkit-keyframes opacity {
438
+ from { opacity: 0; }
439
+ to { opacity: 1; }
440
+ }
441
+
442
+ /* Internet Explorer */
443
+ @-ms-keyframes opacity {
444
+ from { opacity: 0; }
445
+ to { opacity: 1; }
446
+ }
447
+
448
+
449
+
450
+ /* Opera */
451
+ @-o-keyframes opacity {
452
+ from { opacity: 0; }
453
+ to { opacity: 1; }
454
+ }
455
+
456
+
457
+
458
+ @media screen and (max-width: 783px) {
459
+ .wrap .sb-pack input.regular-text {
460
+ width: 14em;
461
+ }
462
+ }
463
+
464
+ @media screen and (min-width: 784px) {
465
+ .wrap .sb-pack input.regular-text {
466
+ width: 45em;
467
+ }
468
+ }
469
+
470
+ /* Feedback Box */
471
+ .feedback-box {
472
+ border: 1px dashed #555;
473
+ background: #fff;
474
+ width: 100%;
475
+ padding: 40px;
476
+ text-align: center;
477
+ margin-top: 15px;
478
+ box-sizing: border-box;
479
+ }
480
+
481
+ .feedback-box .button.button-feedback {
482
+ padding: 10px 40px;
483
+ height: initial;
484
+ }
485
+
486
+ #sbp-current-image img {
487
+ max-width: 130px;
488
+ height: auto;
489
+ }
490
+
491
+ .feedback-box h3 {
492
+ font-weight: 700;
493
+ }
494
+
495
+ .feedback-box h3 > img {
496
+ width: 30px;
497
+ }
498
+
499
+ .feedback-box > p {
500
+ max-width: 720px;
501
+ margin: 0 auto;
502
+ }
503
+
504
+ /* sbp-tooltips */
505
+ /**
506
+ * Tooltip Styles
507
+ */
508
+
509
+ /* Base styles for the element that has a tooltip */
510
+ [data-tooltip],
511
+ .tooltip {
512
+ position: relative;
513
+ cursor: pointer;
514
+ }
515
+
516
+ /* Base styles for the entire tooltip */
517
+ [data-tooltip]:before,
518
+ [data-tooltip]:after,
519
+ .tooltip:before,
520
+ .tooltip:after {
521
+ position: absolute;
522
+ visibility: hidden;
523
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
524
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
525
+ opacity: 0;
526
+ -webkit-transition: opacity 0.2s ease-in-out,
527
+ visibility 0.2s ease-in-out,
528
+ -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
529
+ -moz-transition: opacity 0.2s ease-in-out,
530
+ visibility 0.2s ease-in-out,
531
+ -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
532
+ transition: opacity 0.2s ease-in-out,
533
+ visibility 0.2s ease-in-out,
534
+ transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
535
+ -webkit-transform: translate3d(0, 0, 0);
536
+ -moz-transform: translate3d(0, 0, 0);
537
+ transform: translate3d(0, 0, 0);
538
+ pointer-events: none;
539
+ }
540
+
541
+ /* Show the entire tooltip on hover and focus */
542
+ [data-tooltip]:hover:before,
543
+ [data-tooltip]:hover:after,
544
+ [data-tooltip]:focus:before,
545
+ [data-tooltip]:focus:after,
546
+ .tooltip:hover:before,
547
+ .tooltip:hover:after,
548
+ .tooltip:focus:before,
549
+ .tooltip:focus:after {
550
+ visibility: visible;
551
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
552
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
553
+ opacity: 1;
554
+ }
555
+
556
+ /* Base styles for the tooltip's directional arrow */
557
+ .tooltip:before,
558
+ [data-tooltip]:before {
559
+ z-index: 1001;
560
+ border: 6px solid transparent;
561
+ background: transparent;
562
+ content: "";
563
+ }
564
+
565
+ /* Base styles for the tooltip's content area */
566
+ .tooltip:after,
567
+ [data-tooltip]:after {
568
+ z-index: 1000;
569
+ padding: 8px;
570
+ width: 360px;
571
+ background-color: #000;
572
+ background-color: hsla(0, 0%, 20%, 1);
573
+ color: #fff;
574
+ content: attr(data-tooltip);
575
+ line-height: 1.75;
576
+ }
577
+
578
+ /* Directions */
579
+
580
+ /* Top (default) */
581
+ [data-tooltip]:before,
582
+ [data-tooltip]:after,
583
+ .tooltip:before,
584
+ .tooltip:after,
585
+ .tooltip-top:before,
586
+ .tooltip-top:after {
587
+ bottom: 100%;
588
+ left: 50%;
589
+ }
590
+
591
+ [data-tooltip]:before,
592
+ .tooltip:before,
593
+ .tooltip-top:before {
594
+ margin-left: -6px;
595
+ margin-bottom: -12px;
596
+ border-top-color: #000;
597
+ border-top-color: hsla(0, 0%, 20%, 0.9);
598
+ }
599
+
600
+ /* Horizontally align top/bottom tooltips */
601
+ [data-tooltip]:after,
602
+ .tooltip:after,
603
+ .tooltip-top:after {
604
+ margin-left: -80px;
605
+ }
606
+
607
+ [data-tooltip]:hover:before,
608
+ [data-tooltip]:hover:after,
609
+ [data-tooltip]:focus:before,
610
+ [data-tooltip]:focus:after,
611
+ .tooltip:hover:before,
612
+ .tooltip:hover:after,
613
+ .tooltip:focus:before,
614
+ .tooltip:focus:after,
615
+ .tooltip-top:hover:before,
616
+ .tooltip-top:hover:after,
617
+ .tooltip-top:focus:before,
618
+ .tooltip-top:focus:after {
619
+ -webkit-transform: translateY(-12px);
620
+ -moz-transform: translateY(-12px);
621
+ transform: translateY(-12px);
622
+ }
623
+
624
+ /* Left */
625
+ .tooltip-left:before,
626
+ .tooltip-left:after {
627
+ right: 100%;
628
+ bottom: 50%;
629
+ left: auto;
630
+ }
631
+
632
+ .tooltip-left:before {
633
+ margin-left: 0;
634
+ margin-right: -12px;
635
+ margin-bottom: 0;
636
+ border-top-color: transparent;
637
+ border-left-color: #000;
638
+ border-left-color: hsla(0, 0%, 20%, 0.9);
639
+ }
640
+
641
+ .tooltip-left:hover:before,
642
+ .tooltip-left:hover:after,
643
+ .tooltip-left:focus:before,
644
+ .tooltip-left:focus:after {
645
+ -webkit-transform: translateX(-12px);
646
+ -moz-transform: translateX(-12px);
647
+ transform: translateX(-12px);
648
+ }
649
+
650
+ /* Bottom */
651
+ .tooltip-bottom:before,
652
+ .tooltip-bottom:after {
653
+ top: 100%;
654
+ bottom: auto;
655
+ left: 50%;
656
+ }
657
+
658
+ .tooltip-bottom:before {
659
+ margin-top: -12px;
660
+ margin-bottom: 0;
661
+ border-top-color: transparent;
662
+ border-bottom-color: #000;
663
+ border-bottom-color: hsla(0, 0%, 20%, 0.9);
664
+ }
665
+
666
+ .tooltip-bottom:hover:before,
667
+ .tooltip-bottom:hover:after,
668
+ .tooltip-bottom:focus:before,
669
+ .tooltip-bottom:focus:after {
670
+ -webkit-transform: translateY(12px);
671
+ -moz-transform: translateY(12px);
672
+ transform: translateY(12px);
673
+ }
674
+
675
+ /* Right */
676
+ .tooltip-right:before,
677
+ .tooltip-right:after {
678
+ bottom: 50%;
679
+ left: 100%;
680
+ }
681
+
682
+ .tooltip-right:before {
683
+ margin-bottom: 0;
684
+ margin-left: -12px;
685
+ border-top-color: transparent;
686
+ border-right-color: #000;
687
+ border-right-color: hsla(0, 0%, 20%, 0.9);
688
+ }
689
+
690
+ .tooltip-right:hover:before,
691
+ .tooltip-right:hover:after,
692
+ .tooltip-right:focus:before,
693
+ .tooltip-right:focus:after {
694
+ -webkit-transform: translateX(12px);
695
+ -moz-transform: translateX(12px);
696
+ transform: translateX(12px);
697
+ }
698
+
699
+ /* Move directional arrows down a bit for left/right tooltips */
700
+ .tooltip-left:before,
701
+ .tooltip-right:before {
702
+ top: 3px;
703
+ }
704
+
705
+ /* Vertically center tooltip content for left/right tooltips */
706
+ .tooltip-left:after,
707
+ .tooltip-right:after {
708
+ margin-left: 0;
709
+ margin-bottom: -16px;
710
+ }
711
+
712
+ /* ShortPixel Banner Styling */
713
+ .sbp-recommended-plugins {
714
+ border: 1px solid #e5e5e5;
715
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .04);
716
+ margin-top: 1em;
717
+ }
718
+
719
+ .sbp-recommended-plugins h3 {
720
+ margin: 0 0 15px 0;
721
+ }
722
+
723
+ .sbp-recommended-plugins .sbp-recommended-plugin {
724
+ background-color: #fff;
725
+ display: flex;
726
+ align-items: center;
727
+ padding: 2em 1em;
728
+ }
729
+
730
+ .sbp-recommended-plugins .sbp-recommended-plugin:nth-child( even ) {
731
+ background-color: #fcfcfc;
732
+ border-top: 1px solid #e5e5e5;
733
+ border-bottom: 1px solid #e5e5e5;
734
+ }
735
+
736
+ .sbp-recommended-plugins .sbp-recommended-plugin .plugin-image {
737
+ width: 128px;
738
+ }
739
+
740
+ .sbp-recommended-plugins .sbp-recommended-plugin .plugin-information {
741
+ padding-left: 30px;
742
+ box-sizing: border-box;
743
+ width: calc(100% - 128px);
744
+ }
745
+
746
+ .sbp-recommended-plugins .sbp-recommended-plugin .plugin-information .plugin-name,
747
+ .sbp-recommended-plugins .sbp-recommended-plugin .plugin-information .plugin-description {
748
+ margin: 0;
749
+ }
750
+
751
+ .sbp-recommended-plugins .sbp-recommended-plugin .plugin-information .plugin-description {
752
+ margin-bottom: 10px;
753
+ }
754
+
755
+ .sbp-recommended-plugins .sbp-recommended-plugin .sbp-plugin-button.sbp-updating:before {
756
+ font: normal 20px/1 dashicons;
757
+ display: inline-block;
758
+ content: "\f463";
759
+ -webkit-animation: rotation 2s infinite linear;
760
+ animation: rotation 2s infinite linear;
761
+ margin: 3px 5px 0 -2px;
762
+ vertical-align: top;
763
+ }
764
+
765
+ /* Welcome Logo*/
766
+ .wp-badge.sbp-welcome-logo {
767
+ background-color: #fff;
768
+ background-image: url(../inc/images/icon-128x128.jpg);
769
+ background-position: center center;
770
+ background-size: 70%;
771
+ background-repeat: no-repeat;
772
+ padding-top: 160px;
773
+ }
774
+
775
+ /* Support Page */
776
+ .center-support {text-align: center;}
777
+
778
+ /* Fast as a rabbit, slow as a snail box */
779
+ .sbp-fast-as-a-rabbit {
780
+ background-color: #fff;
781
+ width: 100%;
782
+ border-radius: 5px;
783
+ position: relative;
784
+ margin: 15px auto;
785
+ }
786
+
787
+ .sbp-fast-as-a-rabbit > div {
788
+ display: inline-block;
789
+ border-right: 1px solid #f3f3f3;
790
+ padding: 10px 20px;
791
+ text-align: center;
792
+ vertical-align: middle;
793
+ }
794
+
795
+ .sbp-fast-as-a-rabbit > div > i {margin-right: 8px;}
796
+
797
+ .sbp-fast-as-a-rabbit > div > span { font-weight: bold;}
798
+
799
+ /*
800
+ .sbp-fast-as-a-rabbit > div:last-of-type .button {border-radius: 5px;}
801
+
802
+ .sbp-fast-as-a-rabbit > div:last-of-type .button-secondary { color: #9a9a9a;}
803
+
804
+ .sbp-fast-as-a-rabbit > div:last-of-type .button-primary {padding-left: 20px; padding-right: 20px;}
805
+
806
+ .sbp-fast-as-a-rabbit > div:last-of-type .dashicons {
807
+ vertical-align: middle;
808
+ height: 24px;
809
+ }
810
+
811
+ .sbp-fast-as-a-rabbit > div:last-of-type {
812
+ text-align: right;
813
+ position: absolute;
814
+ right: 0;
815
+ top: 50%;
816
+ margin-top: -26px;
817
+ }
818
+
819
+ */
820
+
821
+ .sbp-fast-as-a-rabbit > div:nth-of-type(4),
822
+ .sbp-fast-as-a-rabbit > div:nth-of-type(5) {
823
+ border-right: 0;
824
+ }
825
+
826
+ /* Progress bars */
827
+ .sbp-fast-as-a-rabbit progress {
828
+ margin-left: 8px;
829
+ }
830
+
831
+ .sbp-progress-bar {
832
+ padding: 5px;
833
+ }
834
+
835
+ .sbp-progress-bar progress {
836
+ background-color: #f3f3f3;
837
+ border: 1px solid #ececec;
838
+ border-radius: 9px;
839
+ margin-right: 8px;
840
+ }
841
+
842
+ .sbp-progress-bar progress::-webkit-progress-bar {
843
+ background-color: #f3f3f3;
844
+ border-radius: 9px;
845
+ }
846
+
847
+ .sbp-progress-bar progress::-webkit-progress-value {
848
+ background: green;
849
+ border-radius: 9px;
850
+ }
851
+
852
+ .sbp-progress-bar progress::-moz-progress-bar {
853
+ background: green;
854
+ border-radius: 9px;
855
+ }
856
+
857
+ .sbp-progress-bar progress.sbp-progress-red::-webkit-progress-value {background: red;}
858
+
859
+ .sbp-progress-bar progress.sbp-progress-red::-moz-progress-bar {background: red;}
860
+
861
+ .sbp-progress-bar .progress-value {
862
+ padding: 0px 5px;
863
+ line-height: 20px;
864
+ margin-left: 5px;
865
+ font-size: .8em;
866
+ color: #555;
867
+ height: 18px;
868
+ }
869
+
870
+ /* Box */
871
+ .sbp-box {
872
+ height: 330px;
873
+ margin-top: 15px;
874
+ text-align: center;
875
+ background: #FFF;
876
+ position: relative;
877
+ border: 1px solid rgba(0, 0, 0, .1);
878
+ float: left;
879
+ }
880
+
881
+ .sbp-box img {
882
+ width: 125px;
883
+ height: 125px;
884
+ margin: 0 auto;
885
+ margin-bottom: 15px;
886
+ display: block;
887
+ border: none;
888
+ }
889
+
890
+ .sbp-box__name {
891
+ margin-bottom: 10px;
892
+ padding: 0 26px;
893
+ font-weight: 600;
894
+ }
895
+
896
+ .sbp-box__description {
897
+ font-size: 0.9em;
898
+ }
899
+
900
+ .sbp-box__action-bar {
901
+ position: absolute;
902
+ bottom: 0;
903
+ left: 0;
904
+ right: 0;
905
+ font-size: 15px;
906
+ margin: 0;
907
+ padding: 15px;
908
+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, .1);
909
+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, .1);
910
+ white-space: nowrap;
911
+ text-overflow: ellipsis;
912
+ background: rgba(255, 255, 255, .65);
913
+ text-align: left;
914
+ }
915
+
916
+ .sbp-box__action-button {
917
+ position: absolute;
918
+ bottom: 0px;
919
+ right: 0px;
920
+ padding: 9px 10px 10px;
921
+ background: #f6f6f6;
922
+ border-top: 1px solid rgba(0, 0, 0, .1);
923
+ text-align: center;
924
+ width: 100%;
925
+ }
926
+
css/style.dev.css DELETED
@@ -1,622 +0,0 @@
1
- h3.sbp-emphasize {
2
- color: #FA5148;
3
- }
4
- img.sbp-sp {
5
- float: left;
6
- margin-right: 20px;
7
- }
8
- p.description-link {
9
- margin-top: -5px;
10
- }
11
-
12
- .wrap .sb-pack .welcome-panel .welcome-panel-column:first-child {
13
- display: block !important;
14
- }
15
-
16
- .wrap .sb-pack .welcome-panel h4 {
17
- margin: 1.33em 0 20px;
18
- }
19
-
20
- .wrap .sb-pack .sbp-inline-wrap {
21
- display: inline-block;
22
- margin-right: 10px;
23
- vertical-align: top;
24
- }
25
-
26
- .wrap .sb-pack .sbp-more-width {
27
- width: 300px;
28
- }
29
-
30
- .wrap .sb-pack input[type="text"] {
31
- line-height: 1.3;
32
- }
33
-
34
- .wrap .sb-pack .sbp-all-enqueued {
35
- background-color: #FCFCFC;
36
- padding: 5px 0px 10px;
37
- border: 1px solid #ddd;
38
- width: auto;
39
- }
40
-
41
- .wrap .sb-pack .sbp-width {
42
- min-width: 200px;
43
- width: auto;
44
- padding: 0 20px;
45
- }
46
-
47
- .wrap .sb-pack .sbp-title-scripts {
48
- min-width: 200px;
49
- width: auto;
50
- display: inline-block;
51
- font-weight: 700;
52
- padding: 0 20px;
53
- }
54
-
55
- .wrap .sb-pack #poststuff h2 {
56
- font-size: 32px;
57
- padding: 9px 15px 20px 0px;
58
- font-weight: 700;
59
- line-height: 1.3;
60
- }
61
-
62
- .wrap .sb-pack #poststuff .main-sbp-title h3 {
63
- font-size: 24px;
64
- padding: 8px 0 20px;
65
- font-weight: 700;
66
- color: #FA5148;
67
- }
68
-
69
- .wrap .sb-pack .handlediv {
70
- color: #80828F;
71
- padding: 10px 0 0;
72
- cursor: pointer;
73
- }
74
-
75
- .wrap .sb-pack .meta-box-sortables .postbox .handlediv:before {
76
- right: 20px;
77
- font: 400 30px/1.2 'dashicons';
78
- padding: 8px 0;
79
- }
80
-
81
- .wrap .sb-pack .meta-box-sortables .postbox .handlediv:before {
82
- content: "\f343";
83
- }
84
-
85
- .wrap .sb-pack .meta-box-sortables .postbox.closed .handlediv:before {
86
- content: "\f347";
87
- }
88
-
89
- .wrap .sb-pack .postbox .inside {
90
- padding: 0 20px 20px;
91
- }
92
-
93
- .postbox {
94
- position: relative;
95
- overflow: hidden;
96
- }
97
- .wrap .sb-pack #poststuff .inside {
98
- margin: 26px 0 0;
99
- }
100
-
101
- .wrap .sb-pack #poststuff h3{
102
- font-size: 24px;
103
- padding: 8px 20px;
104
- font-weight: 700;
105
- display: inline-block;
106
- }
107
-
108
- .wrap .sb-pack .sbp-columns1 {
109
- display: inline-block;
110
- }
111
-
112
- .wrap .sb-pack .sbp-columns2 {
113
- display: inline-block;
114
- max-width: 73%;
115
- }
116
-
117
- .wrap .sb-pack .sbp-title-div {
118
- height: 50px;
119
- clear: both;
120
- }
121
-
122
- .wrap .sb-pack .sbp-amount {
123
- background-color: transparent;
124
- border: medium none;
125
- box-shadow: none;
126
- font-size: 16px;
127
- }
128
-
129
- .wrap .sb-pack .sbp-slider {
130
- width: 40%;
131
- }
132
-
133
- .wrap .sb-pack p {
134
- color: #464646;
135
- line-height: 1.6;
136
- }
137
- .wrap .sb-pack p.sp-link {
138
- text-align: center;
139
- font-size: 1.2em;
140
- margin-bottom: 20px;
141
- }
142
-
143
- .wrap .sb-pack .debug-info {
144
- margin-top: 19px;
145
- border: 1px solid #1A9E51;
146
- padding: 17px 10px;
147
- background-color: #2DCB73;
148
- color: #FFF;
149
- font-size: 16px;
150
- line-height: 1.6;
151
- text-shadow: 1px 1px #1A9E51;
152
- }
153
-
154
- .wrap .sb-pack .td-margin {
155
- margin: 1.5em 0 1.5em;
156
- }
157
-
158
- .wrap .sb-pack .sbp-div-head {
159
- border-bottom: 1px solid #E1E1E1;
160
- margin:0 0 5px;
161
- padding: 0 0 5px;
162
- }
163
-
164
- .wrap .sb-pack .td-border {
165
- border-bottom: 1px solid #E1E1E1;
166
- margin: 10px 0;
167
- }
168
-
169
- .wrap .sb-pack .td-border-last {
170
- border-bottom: 1px solid #E1E1E1;
171
- margin: 1.5em 0;
172
- }
173
-
174
- .wrap .sb-pack .sbp-radio-content {
175
- display: block;
176
- }
177
-
178
- .wrap .sb-pack .sbp-radio-content label {
179
- display: block !important;
180
- }
181
-
182
- .wrap .sb-pack .sbp-box hr {
183
- margin-left: 70px;
184
- }
185
-
186
- .wrap .sb-pack .sbp-1 {
187
- padding-top: 10px;
188
- }
189
-
190
- .wrap .sb-pack .sbp-2 {
191
- padding-bottom: 15px;
192
- }
193
-
194
- .wrap .sb-pack .sbp-3 {
195
- padding-top: 5px;
196
- }
197
-
198
- .wrap .sb-pack .sbp-title-div .sbp-title {
199
- font-size: 23px;
200
- font-weight: 300;
201
- line-height: 26px;
202
- padding-top: 16px;
203
- padding-right: 15px;
204
- display: block;
205
- float: left;
206
- }
207
-
208
- .wrap .sb-pack .sbp-box {
209
- background:#fff;
210
- border: 1px solid #E5E5E5;
211
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
212
- padding: 15px;
213
- margin-bottom: 15px;
214
- position: relative;
215
- overflow: hidden;
216
- }
217
-
218
- .wrap .sb-pack .sbp-box p {
219
- margin: 5px 0 5px 70px;
220
- color: #777;
221
- }
222
-
223
- .wrap .sb-pack .sbp-infos {
224
- display: block;
225
- margin: 0 auto;
226
- padding-left: 70px;
227
- font-weight: 700;
228
- color:#777;
229
- }
230
-
231
- .wrap .sb-pack .sbp-infos span {
232
- color: #777;
233
- font-weight: 400;
234
- }
235
-
236
- .wrap .sb-pack .sbp-infos-title {
237
- font-weight: 700;
238
- color: #777;
239
- }
240
-
241
- .wrap .sb-pack .sbp-box-legend, .wrap .sb-pack .sbp-box-version {
242
- position: absolute;
243
- left: 0;
244
- top: 0;
245
- height: 100%;
246
- }
247
-
248
- .wrap .sb-pack .sbp-box-version {
249
- background: none repeat scroll 0% 0% #80828F;
250
- padding: 20px 15px;
251
- }
252
-
253
- .wrap .sb-pack .sbp-box-legend {
254
- background: none repeat scroll 0% 0% #FCC500;
255
- padding: 15px 15px;
256
- }
257
-
258
- .wrap .sb-pack .sbp-box-legend:hover {
259
- background-color: #F39C12;
260
- }
261
-
262
- .wrap .sb-pack .sbp-box-version:hover {
263
- background-color: #6C6E79;
264
- }
265
-
266
- .wrap .sb-pack .sbp-icon-help, .wrap .sb-pack .sbp-icon-version {
267
- color:#FFF;
268
- font-size:25px;
269
- }
270
-
271
- .wrap .sb-pack .sbp-icon:before {
272
- content: "\f185";
273
- display: inline-block;
274
- -webkit-font-smoothing: antialiased;
275
- font: normal 36px/0.6 'dashicons';
276
- vertical-align: sub;
277
- color: #FA5148;
278
- padding-right: 5px;
279
- }
280
-
281
- .wrap .sb-pack .sbp-icon-information:before {
282
- content: "\f348";
283
- display: inline-block;
284
- -webkit-font-smoothing: antialiased;
285
- font: normal 28px/1 'dashicons';
286
- vertical-align: middle;
287
- color: #C9D6E2;
288
- padding-right: 5px;
289
- }
290
-
291
- .wrap .sb-pack label {
292
- display: inline-block;
293
- cursor: pointer;
294
- position: relative;
295
- padding-left: 35px;
296
- font-size: 16px;
297
-
298
- }
299
-
300
- /*.wrap .sb-pack #sbp-css-content {
301
- display: none;
302
- }*/
303
-
304
- .wrap .sb-pack label:before {
305
- content: "\2717";
306
- font-size: 16px;
307
- -webkit-font-smoothing: antialiased;
308
- text-align: center;
309
- color: #fff;
310
- display: inline-block;
311
- width: 26px;
312
- height: 26px;
313
- margin-right: 10px;
314
- position: absolute;
315
- left: 0;
316
- background: #C9D6E2;
317
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
318
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
319
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
320
- border: 1px solid #B2BFCA;
321
- }
322
-
323
- .wrap .sb-pack input[type=checkbox],
324
- .wrap .sb-pack input[type=radio] {
325
- display: none;
326
- }
327
-
328
- /*.wrap .sb-pack .sbp-radio-content label:before {
329
- content: "\2630";
330
- font-size: 16px;
331
- -webkit-font-smoothing: antialiased;
332
- text-align: center;
333
- color: #fff;
334
- font-weight: 700;
335
- display: inline-block;
336
- width: 24px;
337
- height: 24px;
338
- line-height: 1.4;
339
- margin-right: 10px;
340
- position: absolute;
341
- left: 0;
342
- background: #C9D6E2;
343
- border: 1px solid #9CA8B3;
344
- }
345
-
346
- .wrap .sb-pack input[type=radio]:checked + label:before {
347
- content: "\2630";
348
- background: none repeat scroll 0% 0% #2DCB73;
349
- text-align: center;
350
- font-weight: 700;
351
- color: #fff;
352
- border: 1px solid #1A9E51;
353
- } */
354
-
355
- .wrap .sb-pack input[type=checkbox]:checked + label:before {
356
- content: "\2714";
357
- background: #2DCB73;
358
- text-shadow: 1px 1px 1px #148D44;
359
- border: 1px solid #1A9E51;
360
- font-size: 16px;
361
- -webkit-font-smoothing: antialiased;
362
- color: #fff;
363
- text-align: center;
364
- }
365
-
366
- .wrap .sb-pack .sbp-icon-version:before {
367
- content: "\f348";
368
- display: inline-block;
369
- -webkit-font-smoothing: antialiased;
370
- font: normal 30px/1 'dashicons';
371
- vertical-align: top;
372
- }
373
-
374
- .wrap .sb-pack .sbp-icon-help:before {
375
- content: "\f123";
376
- display: inline-block;
377
- -webkit-font-smoothing: antialiased;
378
- font: normal 30px/1 'dashicons';
379
- vertical-align: top;
380
- }
381
-
382
- .wrap .sb-pack .sbp-stats {
383
- font-size: 16px;
384
- line-height: 1.5;
385
- }
386
-
387
- /* Jquery UI slider
388
- -------------------------------------------------------------- */
389
-
390
- .wrap .sb-pack.ui-state-default,
391
- .wrap .sb-pack .ui-widget-content .ui-state-default,
392
- .wrap .sb-pack .ui-widget-header .ui-state-default {
393
- border:1px solid #1A9E51;
394
- background-color:#2DCB73;
395
- font-weight:400;
396
- color:#555;
397
- outline:0 none;
398
- cursor:pointer;
399
- }
400
- .wrap .sb-pack .ui-state-default:before,
401
- .wrap .sb-pack .ui-widget-content .ui-state-default:before,
402
- .wrap .sb-pack .ui-widget-header .ui-state-default:before {
403
- content:"\2630";
404
- display:inline-block;
405
- -webkit-font-smoothing:antialiased;
406
- color:#fff;
407
- font-weight:700;
408
- text-shadow:0 1px #1A9E51;
409
- line-height: 1.8em;
410
- }
411
-
412
- .wrap .sb-pack .ui-state-default a,
413
- .wrap .sb-pack .ui-state-default a:link,
414
- .wrap .sb-pack .ui-state-default a:visited {
415
- color:#fff;
416
- text-decoration:none;
417
- }
418
-
419
- .wrap .sb-pack .ui-state-focus,
420
- .wrap .sb-pack .ui-state-hover,
421
- .wrap .sb-pack .ui-widget-content .ui-state-focus,
422
- .wrap .sb-pack .ui-widget-content .ui-state-hover,
423
- .wrap .sb-pack .ui-widget-header .ui-state-focus,
424
- .wrap .sb-pack .ui-widget-header .ui-state-hover {
425
- background:#3CE281;
426
- }
427
-
428
- .wrap .sb-pack .ui-corner-all,
429
- .wrap .sb-pack .ui-corner-top,
430
- .wrap .sb-pack .ui-corner-left,
431
- .wrap .sb-pack .ui-corner-tl {
432
- border-top-left-radius: 0;
433
- }
434
- .wrap .sb-pack .ui-corner-all,
435
- .wrap .sb-pack .ui-corner-top,
436
- .wrap .sb-pack .ui-corner-right,
437
- .wrap .sb-pack .ui-corner-tr {
438
- border-top-right-radius: 0;
439
- }
440
- .wrap .sb-pack .ui-corner-bottom,
441
- .wrap .sb-pack .ui-corner-left,
442
- .wrap .sb-pack .ui-corner-bl {
443
- border-bottom-left-radius: 0;
444
- }
445
- .wrap .sb-pack .ui-corner-all,
446
- .wrap .sb-pack .ui-corner-bottom,
447
- .wrap .sb-pack .ui-corner-right,
448
- .wrap .sb-pack .ui-corner-br {
449
- border-bottom-right-radius: 0;
450
- }
451
-
452
- .wrap .sb-pack .ui-corner-all,
453
- .wrap .sb-pack .ui-corner-bottom,
454
- .wrap .sb-pack .ui-corner-left,
455
- .wrap .sb-pack .ui-corner-bl {
456
- border-bottom-left-radius: 0;
457
- }
458
-
459
- .wrap .sb-pack .ui-slider-horizontal {
460
- height:1.3em;
461
- }
462
-
463
- .wrap .sb-pack .ui-slider .ui-slider-handle {
464
- width:1.8em;
465
- height:1.8em;
466
- cursor:pointer;
467
- text-align:center;
468
- }
469
-
470
- .wrap .sb-pack .ui-widget-content {
471
- -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);
472
- -moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);
473
- box-shadow:inset 0 1px 2px rgba(0,0,0,.1);
474
- border:1px solid #B2BFCA;
475
- background:#F1F2F7;
476
- color:#222
477
- }
478
- /* Progress Bars
479
- -------------------------------------------------------------- */
480
- .wrap .sb-pack .sbp-progress.time,
481
- .wrap .sb-pack .sbp-progress.queries {
482
- height: 30px;
483
- width: 77%;
484
- display: inline-block;
485
- position: relative;
486
- background-color: #F1F2F7;
487
- overflow: hidden;
488
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
489
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
490
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
491
- }
492
- .wrap .sbp-progress.time > span,
493
- .wrap .sbp-progress.queries > span {
494
- background-color: #7EDBA5;
495
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #7EDBA5),color-stop(1, #2DCB73));
496
- background-image: -webkit-linear-gradient(top, #7EDBA5, #2DCB73);
497
- background-image: -moz-linear-gradient(top, #7EDBA5, #2DCB73);
498
- background-image: -ms-linear-gradient(top, #7EDBA5, #2DCB73);
499
- background-image: -o-linear-gradient(top, #7EDBA5, #f36d0a);
500
- color:#fff;
501
- width: 0%;
502
- max-width: 98%;
503
- float: left;
504
- display: block;
505
- height: 100%;
506
- position: relative;
507
- overflow: hidden;
508
- }
509
-
510
- .wrap .sb-pack .sbp-progress.time > span {
511
- -webkit-animation: progress-bar-time 2s 1 forwards;
512
- -moz-animation: progress-bar-time 2s 1 forwards;
513
- -ms-animation: progress-bar-time 2s 1 forwards;
514
- -o-animation: progress-bar-time 2s 1 forwards;
515
- animation: progress-bar-time 2s 1 forwards;
516
-
517
- }
518
-
519
- .wrap .sb-pack .sbp-progress.queries > span {
520
- -webkit-animation: progress-bar-queries 2s 1 forwards;
521
- -moz-animation: progress-bar-queries 2s 1 forwards;
522
- -ms-animation: progress-bar-queries 2s 1 forwards;
523
- -o-animation: progress-bar-queries 2s 1 forwards;
524
- animation: progress-bar-queries 2s 1 forwards;
525
-
526
- }
527
-
528
- .wrap .sb-pack .sbp-values {
529
- float: right;
530
- padding: 0 5px;
531
- background-color: #1AB4EF;
532
- color: #fff;
533
- width: 18%;
534
- height: 30px;
535
- line-height: 30px;
536
- text-align: center;
537
- text-shadow: 0px -2px #1AB4EF;
538
- }
539
-
540
- .wrap .sb-pack .sbp-numbers {
541
- -webkit-animation: opacity 2s; /* Safari and Chrome */
542
- -moz-animation: opacity 2s; /* Firefox */
543
- -ms-animation: opacity 2s; /* Internet Explorer */
544
- -o-animation: opacity 2s; /* Opera */
545
- animation: opacity 2s;
546
- transition-delay: 2s;
547
- -moz-transition-delay: 2s; /* Firefox 4 */
548
- -webkit-transition-delay: 2s; /* Safari and Chrome */
549
- -o-transition-delay: 2s; /* Opera */
550
- font-size: 16px;
551
- }
552
-
553
- @keyframes opacity {
554
- from { opacity:0; }
555
- to { opacity: 1; }
556
- }
557
-
558
- /* Firefox */
559
- @-moz-keyframes opacity {
560
- from { opacity:0; }
561
- to { opacity: 1; }
562
- }
563
-
564
- /* Safari and Chrome */
565
- @-webkit-keyframes opacity {
566
- from { opacity:0; }
567
- to { opacity: 1; }
568
- }
569
-
570
- /* Internet Explorer */
571
- @-ms-keyframes opacity {
572
- from { opacity:0; }
573
- to { opacity: 1; }
574
- }​
575
-
576
- /* Opera */
577
- @-o-keyframes opacity {
578
- from { opacity:0; }
579
- to { opacity: 1; }
580
- }​
581
-
582
- @media screen and (max-width: 783px) {
583
- .wrap .sb-pack input.regular-text {
584
- width: 14em;
585
- }
586
- }
587
-
588
- @media screen and (min-width: 784px) {
589
- .wrap .sb-pack input.regular-text {
590
- width: 45em;
591
- }
592
- }
593
-
594
- /* Feedback Box */
595
- .feedback-box {
596
- border: 1px dashed #555;
597
- background: #fff;
598
- width: 100%;
599
- padding: 40px;
600
- text-align: center;
601
- margin-top: 15px;
602
- box-sizing: border-box;
603
- }
604
- .feedback-box .button.button-feedback {
605
- padding: 10px 40px;
606
- height: initial;
607
- }
608
-
609
- #sab-current-image img {
610
- max-width: 130px;
611
- height: auto;
612
- }
613
- .feedback-box h3 {
614
- font-weight: 700;
615
- }
616
- .feedback-box h3 > img {
617
- width: 30px;
618
- }
619
- .feedback-box > p {
620
- max-width: 720px;
621
- margin: 0 auto;
622
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/vendors/jquery-ui/images/ui-icons_444444_256x240.png ADDED
Binary file
css/vendors/jquery-ui/images/ui-icons_555555_256x240.png ADDED
Binary file
css/vendors/jquery-ui/images/ui-icons_777620_256x240.png ADDED
Binary file
css/vendors/jquery-ui/images/ui-icons_777777_256x240.png ADDED
Binary file
css/vendors/jquery-ui/images/ui-icons_cc0000_256x240.png ADDED
Binary file
css/vendors/jquery-ui/images/ui-icons_ffffff_256x240.png ADDED
Binary file
css/vendors/jquery-ui/jquery-ui.min.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.12.1 - 2016-09-14
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("jquery-ui/images/ui-icons_444444_256x240.png")} .ui-widget-header .ui-icon{background-image:url("jquery-ui/images/ui-icons_444444_256x240.png")} .ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("jquery-ui/images/ui-icons_555555_256x240.png")} .ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("jquery-ui/images/ui-icons_ffffff_256x240.png")} .ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("jquery-ui/images/ui-icons_777620_256x240.png")} .ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("jquery-ui/images/ui-icons_cc0000_256x240.png")} .ui-button .ui-icon{background-image:url("jquery-ui/images/ui-icons_777777_256x240.png")} .ui-icon-blank{background-position:16px 16px} .ui-icon-caret-1-n{background-position:0 0} .ui-icon-caret-1-ne{background-position:-16px 0} .ui-icon-caret-1-e{background-position:-32px 0} .ui-icon-caret-1-se{background-position:-48px 0} .ui-icon-caret-1-s{background-position:-65px 0} .ui-icon-caret-1-sw{background-position:-80px 0} .ui-icon-caret-1-w{background-position:-96px 0} .ui-icon-caret-1-nw{background-position:-112px 0} .ui-icon-caret-2-n-s{background-position:-128px 0} .ui-icon-caret-2-e-w{background-position:-144px 0} .ui-icon-triangle-1-n{background-position:0 -16px} .ui-icon-triangle-1-ne{background-position:-16px -16px} .ui-icon-triangle-1-e{background-position:-32px -16px} .ui-icon-triangle-1-se{background-position:-48px -16px} .ui-icon-triangle-1-s{background-position:-65px -16px} .ui-icon-triangle-1-sw{background-position:-80px -16px} .ui-icon-triangle-1-w{background-position:-96px -16px} .ui-icon-triangle-1-nw{background-position:-112px -16px} .ui-icon-triangle-2-n-s{background-position:-128px -16px} .ui-icon-triangle-2-e-w{background-position:-144px -16px} .ui-icon-arrow-1-n{background-position:0 -32px} .ui-icon-arrow-1-ne{background-position:-16px -32px} .ui-icon-arrow-1-e{background-position:-32px -32px} .ui-icon-arrow-1-se{background-position:-48px -32px} .ui-icon-arrow-1-s{background-position:-65px -32px} .ui-icon-arrow-1-sw{background-position:-80px -32px} .ui-icon-arrow-1-w{background-position:-96px -32px} .ui-icon-arrow-1-nw{background-position:-112px -32px} .ui-icon-arrow-2-n-s{background-position:-128px -32px} .ui-icon-arrow-2-ne-sw{background-position:-144px -32px} .ui-icon-arrow-2-e-w{background-position:-160px -32px} .ui-icon-arrow-2-se-nw{background-position:-176px -32px} .ui-icon-arrowstop-1-n{background-position:-192px -32px} .ui-icon-arrowstop-1-e{background-position:-208px -32px} .ui-icon-arrowstop-1-s{background-position:-224px -32px} .ui-icon-arrowstop-1-w{background-position:-240px -32px} .ui-icon-arrowthick-1-n{background-position:1px -48px} .ui-icon-arrowthick-1-ne{background-position:-16px -48px} .ui-icon-arrowthick-1-e{background-position:-32px -48px} .ui-icon-arrowthick-1-se{background-position:-48px -48px} .ui-icon-arrowthick-1-s{background-position:-64px -48px} .ui-icon-arrowthick-1-sw{background-position:-80px -48px} .ui-icon-arrowthick-1-w{background-position:-96px -48px} .ui-icon-arrowthick-1-nw{background-position:-112px -48px} .ui-icon-arrowthick-2-n-s{background-position:-128px -48px} .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px} .ui-icon-arrowthick-2-e-w{background-position:-160px -48px} .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px} .ui-icon-arrowthickstop-1-n{background-position:-192px -48px} .ui-icon-arrowthickstop-1-e{background-position:-208px -48px} .ui-icon-arrowthickstop-1-s{background-position:-224px -48px} .ui-icon-arrowthickstop-1-w{background-position:-240px -48px} .ui-icon-arrowreturnthick-1-w{background-position:0 -64px} .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px} .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px} .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px} .ui-icon-arrowreturn-1-w{background-position:-64px -64px} .ui-icon-arrowreturn-1-n{background-position:-80px -64px} .ui-icon-arrowreturn-1-e{background-position:-96px -64px} .ui-icon-arrowreturn-1-s{background-position:-112px -64px} .ui-icon-arrowrefresh-1-w{background-position:-128px -64px} .ui-icon-arrowrefresh-1-n{background-position:-144px -64px} .ui-icon-arrowrefresh-1-e{background-position:-160px -64px} .ui-icon-arrowrefresh-1-s{background-position:-176px -64px} .ui-icon-arrow-4{background-position:0 -80px} .ui-icon-arrow-4-diag{background-position:-16px -80px} .ui-icon-extlink{background-position:-32px -80px} .ui-icon-newwin{background-position:-48px -80px} .ui-icon-refresh{background-position:-64px -80px} .ui-icon-shuffle{background-position:-80px -80px} .ui-icon-transfer-e-w{background-position:-96px -80px} .ui-icon-transferthick-e-w{background-position:-112px -80px} .ui-icon-folder-collapsed{background-position:0 -96px} .ui-icon-folder-open{background-position:-16px -96px} .ui-icon-document{background-position:-32px -96px} .ui-icon-document-b{background-position:-48px -96px} .ui-icon-note{background-position:-64px -96px} .ui-icon-mail-closed{background-position:-80px -96px} .ui-icon-mail-open{background-position:-96px -96px} .ui-icon-suitcase{background-position:-112px -96px} .ui-icon-comment{background-position:-128px -96px} .ui-icon-person{background-position:-144px -96px} .ui-icon-print{background-position:-160px -96px} .ui-icon-trash{background-position:-176px -96px} .ui-icon-locked{background-position:-192px -96px} .ui-icon-unlocked{background-position:-208px -96px} .ui-icon-bookmark{background-position:-224px -96px} .ui-icon-tag{background-position:-240px -96px} .ui-icon-home{background-position:0 -112px} .ui-icon-flag{background-position:-16px -112px} .ui-icon-calendar{background-position:-32px -112px} .ui-icon-cart{background-position:-48px -112px} .ui-icon-pencil{background-position:-64px -112px} .ui-icon-clock{background-position:-80px -112px} .ui-icon-disk{background-position:-96px -112px} .ui-icon-calculator{background-position:-112px -112px} .ui-icon-zoomin{background-position:-128px -112px} .ui-icon-zoomout{background-position:-144px -112px} .ui-icon-search{background-position:-160px -112px} .ui-icon-wrench{background-position:-176px -112px} .ui-icon-gear{background-position:-192px -112px} .ui-icon-heart{background-position:-208px -112px} .ui-icon-star{background-position:-224px -112px} .ui-icon-link{background-position:-240px -112px} .ui-icon-cancel{background-position:0 -128px} .ui-icon-plus{background-position:-16px -128px} .ui-icon-plusthick{background-position:-32px -128px} .ui-icon-minus{background-position:-48px -128px} .ui-icon-minusthick{background-position:-64px -128px} .ui-icon-close{background-position:-80px -128px} .ui-icon-closethick{background-position:-96px -128px} .ui-icon-key{background-position:-112px -128px} .ui-icon-lightbulb{background-position:-128px -128px} .ui-icon-scissors{background-position:-144px -128px} .ui-icon-clipboard{background-position:-160px -128px} .ui-icon-copy{background-position:-176px -128px} .ui-icon-contact{background-position:-192px -128px} .ui-icon-image{background-position:-208px -128px} .ui-icon-video{background-position:-224px -128px} .ui-icon-script{background-position:-240px -128px} .ui-icon-alert{background-position:0 -144px} .ui-icon-info{background-position:-16px -144px} .ui-icon-notice{background-position:-32px -144px} .ui-icon-help{background-position:-48px -144px} .ui-icon-check{background-position:-64px -144px} .ui-icon-bullet{background-position:-80px -144px} .ui-icon-radio-on{background-position:-96px -144px} .ui-icon-radio-off{background-position:-112px -144px} .ui-icon-pin-w{background-position:-128px -144px} .ui-icon-pin-s{background-position:-144px -144px} .ui-icon-play{background-position:0 -160px} .ui-icon-pause{background-position:-16px -160px} .ui-icon-seek-next{background-position:-32px -160px} .ui-icon-seek-prev{background-position:-48px -160px} .ui-icon-seek-end{background-position:-64px -160px} .ui-icon-seek-start{background-position:-80px -160px} .ui-icon-seek-first{background-position:-80px -160px} .ui-icon-stop{background-position:-96px -160px} .ui-icon-eject{background-position:-112px -160px} .ui-icon-volume-off{background-position:-128px -160px} .ui-icon-volume-on{background-position:-144px -160px} .ui-icon-power{background-position:0 -176px} .ui-icon-signal-diag{background-position:-16px -176px} .ui-icon-signal{background-position:-32px -176px} .ui-icon-battery-0{background-position:-48px -176px} .ui-icon-battery-1{background-position:-64px -176px} .ui-icon-battery-2{background-position:-80px -176px} .ui-icon-battery-3{background-position:-96px -176px} .ui-icon-circle-plus{background-position:0 -192px} .ui-icon-circle-minus{background-position:-16px -192px} .ui-icon-circle-close{background-position:-32px -192px} .ui-icon-circle-triangle-e{background-position:-48px -192px} .ui-icon-circle-triangle-s{background-position:-64px -192px} .ui-icon-circle-triangle-w{background-position:-80px -192px} .ui-icon-circle-triangle-n{background-position:-96px -192px} .ui-icon-circle-arrow-e{background-position:-112px -192px} .ui-icon-circle-arrow-s{background-position:-128px -192px} .ui-icon-circle-arrow-w{background-position:-144px -192px} .ui-icon-circle-arrow-n{background-position:-160px -192px} .ui-icon-circle-zoomin{background-position:-176px -192px} .ui-icon-circle-zoomout{background-position:-192px -192px} .ui-icon-circle-check{background-position:-208px -192px} .ui-icon-circlesmall-plus{background-position:0 -208px} .ui-icon-circlesmall-minus{background-position:-16px -208px} .ui-icon-circlesmall-close{background-position:-32px -208px} .ui-icon-squaresmall-plus{background-position:-48px -208px} .ui-icon-squaresmall-minus{background-position:-64px -208px} .ui-icon-squaresmall-close{background-position:-80px -208px} .ui-icon-grip-dotted-vertical{background-position:0 -224px} .ui-icon-grip-dotted-horizontal{background-position:-16px -224px} .ui-icon-grip-solid-vertical{background-position:-32px -224px} .ui-icon-grip-solid-horizontal{background-position:-48px -224px} .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px} .ui-icon-grip-diagonal-se{background-position:-80px -224px} .ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px} .ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px} .ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px} .ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px} .ui-widget-overlay{background:#aaa;opacity:.003;filter:Alpha(Opacity=.3)} .ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
feedback/class-epsilon-feedback.php ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Epsilon_Feedback {
4
+
5
+ private $plugin_file = '';
6
+ private $plugin_name = '';
7
+
8
+ function __construct( $_plugin_file ) {
9
+
10
+ $this->plugin_file = $_plugin_file;
11
+ $this->plugin_name = basename( $this->plugin_file, '.php' );
12
+
13
+ // Deactivation
14
+ add_filter( 'plugin_action_links_' . plugin_basename( $this->plugin_file ), array(
15
+ $this,
16
+ 'filter_action_links',
17
+ ) );
18
+ add_action( 'admin_footer-plugins.php', array( $this, 'goodbye_ajax' ) );
19
+ add_action( 'wp_ajax_epsilon_deactivate_plugin', array( $this, 'epsilon_deactivate_plugin_callback' ) );
20
+
21
+ }
22
+
23
+ /**
24
+ * Filter the deactivation link to allow us to present a form when the user deactivates the plugin
25
+ *
26
+ * @since 1.0.0
27
+ */
28
+ public function filter_action_links( $links ) {
29
+
30
+ if ( isset( $links['deactivate'] ) ) {
31
+ $deactivation_link = $links['deactivate'];
32
+ // Insert an onClick action to allow form before deactivating
33
+ $deactivation_link = str_replace( '<a ', '<div class="epsilon-deactivate-form-wrapper"><span class="epsilon-deactivate-form" id="epsilon-deactivate-form-' . esc_attr( $this->plugin_name ) . '"></span></div><a onclick="javascript:event.preventDefault();" id="epsilon-deactivate-link-' . esc_attr( $this->plugin_name ) . '" ', $deactivation_link );
34
+ $links['deactivate'] = $deactivation_link;
35
+ }
36
+
37
+ return $links;
38
+ }
39
+
40
+ /**
41
+ * Form text strings
42
+ * These can be filtered
43
+ *
44
+ * @since 1.0.0
45
+ */
46
+ public function goodbye_ajax() {
47
+ // Get our strings for the form
48
+ $form = $this->get_form_info();
49
+
50
+ // Build the HTML to go in the form
51
+ $html = '<div class="epsilon-deactivate-form-head"><strong>' . esc_html( $form['heading'] ) . '</strong></div>';
52
+ $html .= '<div class="epsilon-deactivate-form-body"><p>' . esc_html( $form['body'] ) . '</p>';
53
+ if ( is_array( $form['options'] ) ) {
54
+ $html .= '<div class="epsilon-deactivate-options"><p>';
55
+ foreach ( $form['options'] as $key => $option ) {
56
+ if ( 'features' == $key ) {
57
+ $html .= '<input type="radio" name="epsilon-deactivate-reason" checked="checked" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '"> <label for="' . esc_attr( $key ) . '">' . esc_attr( $option ) . '</label><br>';
58
+ } else {
59
+ $html .= '<input type="radio" name="epsilon-deactivate-reason" id="' . esc_attr( $key ) . '" value="' . esc_attr( $key ) . '"> <label for="' . esc_attr( $key ) . '">' . esc_attr( $option ) . '</label><br>';
60
+ }
61
+ }
62
+ $html .= '</p><label id="epsilon-deactivate-details-label" for="epsilon-deactivate-reasons"><strong>' . esc_html( $form['details'] ) . '</strong></label><textarea name="epsilon-deactivate-details" id="epsilon-deactivate-details" rows="2" style="width:100%"></textarea>';
63
+ $html .= '<input type="checkbox" name="epsilon-deactivate-tracking" checked="" id="allow-tracking" value="yes"> <label for="allow-tracking">' . esc_html__( 'Allow us to get more information in order to improve our plugin', 'sb-pack' ) . '</label><br>';
64
+ $html .= '</div><!-- .epsilon-deactivate-options -->';
65
+ }
66
+ $html .= '</div><!-- .epsilon-deactivate-form-body -->';
67
+ $html .= '<p class="deactivating-spinner"><span class="spinner"></span> ' . __( 'Submitting form', 'sb-pack' ) . '</p>';
68
+ $html .= '<div class="epsilon-deactivate-form-footer"><p><a id="epsilon-deactivate-plugin" href="#">' . __( 'Just Deactivate', 'sb-pack' ) . '</a><a id="epsilon-deactivate-submit-form" class="button button-primary" href="#">' . __( 'Submit and Deactivate', 'sb-pack' ) . '</a></p></div>'
69
+ ?>
70
+ <div class="epsilon-deactivate-form-bg"></div>
71
+ <style type="text/css">
72
+ .epsilon-deactivate-form-active .epsilon-deactivate-form-bg {
73
+ background: rgba(0, 0, 0, .5);
74
+ position: fixed;
75
+ top: 0;
76
+ left: 0;
77
+ width: 100%;
78
+ height: 100%;
79
+ }
80
+
81
+ .epsilon-deactivate-form-wrapper {
82
+ position: relative;
83
+ z-index: 999;
84
+ display: none;
85
+ }
86
+
87
+ .epsilon-deactivate-form-active .epsilon-deactivate-form-wrapper {
88
+ display: block;
89
+ }
90
+
91
+ .epsilon-deactivate-form {
92
+ display: none;
93
+ }
94
+
95
+ .epsilon-deactivate-form-active .epsilon-deactivate-form {
96
+ position: absolute;
97
+ bottom: 30px;
98
+ left: 0;
99
+ max-width: 400px;
100
+ background: #fff;
101
+ white-space: normal;
102
+ }
103
+
104
+ .epsilon-deactivate-form-head {
105
+ background: #272754;
106
+ color: #fff;
107
+ padding: 8px 18px;
108
+ }
109
+
110
+ .epsilon-deactivate-form-body {
111
+ padding: 8px 18px;
112
+ color: #444;
113
+ }
114
+
115
+ .deactivating-spinner {
116
+ display: none;
117
+ }
118
+
119
+ .deactivating-spinner .spinner {
120
+ float: none;
121
+ margin: 4px 4px 0 18px;
122
+ vertical-align: bottom;
123
+ visibility: visible;
124
+ }
125
+
126
+ .epsilon-deactivate-form-footer {
127
+ padding: 8px 18px;
128
+ }
129
+
130
+ .epsilon-deactivate-form-footer p {
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: space-between;
134
+ }
135
+
136
+ .epsilon-deactivate-form.process-response .epsilon-deactivate-form-body,
137
+ .epsilon-deactivate-form.process-response .epsilon-deactivate-form-footer {
138
+ position: relative;
139
+ }
140
+
141
+ .epsilon-deactivate-form.process-response .epsilon-deactivate-form-body:after,
142
+ .epsilon-deactivate-form.process-response .epsilon-deactivate-form-footer:after {
143
+ content: "";
144
+ display: block;
145
+ position: absolute;
146
+ top: 0;
147
+ left: 0;
148
+ width: 100%;
149
+ height: 100%;
150
+ background-color: rgba(255, 255, 255, .5);
151
+ }
152
+ </style>
153
+ <script>
154
+ jQuery( document ).ready( function( $ ) {
155
+ var deactivateURL = $( "#epsilon-deactivate-link-<?php echo esc_attr( $this->plugin_name ); ?>" ),
156
+ formContainer = $( '#epsilon-deactivate-form-<?php echo esc_attr( $this->plugin_name ); ?>' ),
157
+ detailsStrings = {
158
+ 'setup': '<?php echo __( 'What was the dificult part ?', 'sb-pack' ) ?>',
159
+ 'documentation': '<?php echo __( 'What can we describe more ?', 'sb-pack' ) ?>',
160
+ 'features': '<?php echo __( 'How could we improve ?', 'sb-pack' ) ?>',
161
+ 'better-plugin': '<?php echo __( 'Can you mention it ?', 'sb-pack' ) ?>',
162
+ 'incompatibility': '<?php echo __( 'With what plugin or theme is incompatible ?', 'sb-pack' ) ?>',
163
+ };
164
+
165
+ $( deactivateURL ).on( "click", function() {
166
+ // We'll send the user to this deactivation link when they've completed or dismissed the form
167
+ var url = deactivateURL.attr( 'href' );
168
+ $( 'body' ).toggleClass( 'epsilon-deactivate-form-active' );
169
+ formContainer.fadeIn();
170
+ formContainer.html( '<?php echo $html; ?>' );
171
+
172
+ formContainer.on( 'change', 'input[name="epsilon-deactivate-reason"]', function() {
173
+ var detailsLabel = formContainer.find( '#epsilon-deactivate-details-label strong' );
174
+ var value = formContainer.find( 'input[name="epsilon-deactivate-reason"]:checked' ).val();
175
+ detailsLabel.text( detailsStrings[ value ] );
176
+ } );
177
+
178
+ formContainer.on( 'click', '#epsilon-deactivate-submit-form', function( e ) {
179
+ var data = {
180
+ 'action': 'epsilon_deactivate_plugin',
181
+ 'security': "<?php echo wp_create_nonce( 'epsilon_deactivate_plugin' ); ?>",
182
+ 'dataType': "json"
183
+ };
184
+ e.preventDefault();
185
+ // As soon as we click, the body of the form should disappear
186
+ formContainer.addClass( 'process-response' );
187
+ // Fade in spinner
188
+ formContainer.find( ".deactivating-spinner" ).fadeIn();
189
+
190
+ data[ 'reason' ] = formContainer.find( 'input[name="epsilon-deactivate-reason"]:checked' ).val();
191
+ data[ 'details' ] = formContainer.find( '#epsilon-deactivate-details' ).val();
192
+ data[ 'tracking' ] = formContainer.find( '#allow-tracking:checked' ).length;
193
+
194
+ $.post(
195
+ ajaxurl,
196
+ data,
197
+ function( response ) {
198
+ // Redirect to original deactivation URL
199
+ window.location.href = url;
200
+ }
201
+ );
202
+ } );
203
+
204
+ formContainer.on( 'click', '#epsilon-deactivate-plugin', function( e ) {
205
+ e.preventDefault();
206
+ window.location.href = url;
207
+ } );
208
+
209
+ // If we click outside the form, the form will close
210
+ $( '.epsilon-deactivate-form-bg' ).on( 'click', function() {
211
+ formContainer.fadeOut();
212
+ $( 'body' ).removeClass( 'epsilon-deactivate-form-active' );
213
+ } );
214
+ } );
215
+ } );
216
+ </script>
217
+ <?php }
218
+
219
+ /*
220
+ * Form text strings
221
+ * These are non-filterable and used as fallback in case filtered strings aren't set correctly
222
+ * @since 1.0.0
223
+ */
224
+ public function get_form_info() {
225
+ $form = array();
226
+ $form['heading'] = __( 'Sorry to see you go', 'sb-pack' );
227
+ $form['body'] = __( 'Before you deactivate the plugin, would you quickly give us your reason for doing so?', 'sb-pack' );
228
+ $form['options'] = array(
229
+ 'setup' => __( 'Set up is too difficult', 'sb-pack' ),
230
+ 'documentation' => __( 'Lack of documentation', 'sb-pack' ),
231
+ 'features' => __( 'Not the features I wanted', 'sb-pack' ),
232
+ 'better-plugin' => __( 'Found a better plugin', 'sb-pack' ),
233
+ 'incompatibility' => __( 'Incompatible with theme or plugin', 'sb-pack' ),
234
+ );
235
+ $form['details'] = __( 'How could we improve ?', 'sb-pack' );
236
+
237
+ return $form;
238
+ }
239
+
240
+ public function epsilon_deactivate_plugin_callback() {
241
+
242
+ check_ajax_referer( 'epsilon_deactivate_plugin', 'security' );
243
+
244
+ if ( isset( $_POST['reason'] ) && isset( $_POST['details'] ) && isset( $_POST['tracking'] ) ) {
245
+ require_once 'class-epsilon-plugin-request.php';
246
+ $args = array(
247
+ 'reason' => $_POST['reason'],
248
+ 'details' => $_POST['details'],
249
+ 'tracking' => $_POST['tracking'],
250
+ );
251
+ $request = new Epsilon_Plugin_Request( $this->plugin_file, $args );
252
+ if ( $request->request_successful ) {
253
+ echo json_encode( array(
254
+ 'status' => 'ok',
255
+ ) );
256
+ } else {
257
+ echo json_encode( array(
258
+ 'status' => 'nok',
259
+ ) );
260
+ }
261
+ } else {
262
+ echo json_encode( array(
263
+ 'status' => 'ok',
264
+ ) );
265
+ }
266
+
267
+ die();
268
+
269
+ }
270
+
271
+ }
feedback/class-epsilon-plugin-request.php ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Epsilon_Plugin_Request {
4
+
5
+ /**
6
+ * Url for the request
7
+ *
8
+ * @var string
9
+ */
10
+ private $url = 'https://tamewp.com/';
11
+ /**
12
+ * Api endpoint
13
+ *
14
+ * @var string
15
+ */
16
+ private $endpoint = 'wp-json/epsilon/v1/add-tracking-data';
17
+ /**
18
+ * Private data
19
+ *
20
+ * @var array
21
+ */
22
+ private $data = array(
23
+ 'server' => array(),
24
+ 'user' => array(),
25
+ 'wordpress' => array(
26
+ 'deactivated_plugin' => array(),
27
+ ),
28
+ );
29
+ /**
30
+ * Plugin file
31
+ *
32
+ * @var string
33
+ */
34
+ private $plugin_file = '';
35
+
36
+ private $allow_tracking = 0;
37
+
38
+ public $request_successful = false;
39
+
40
+ function __construct( $_plugin_file, $args ) {
41
+
42
+ // Set variables
43
+ $this->allow_tracking = $args['tracking'];
44
+ $this->plugin_file = $_plugin_file;
45
+ $this->data['unique'] = md5( home_url() . get_bloginfo( 'admin_email' ) );
46
+ $this->data['wordpress']['deactivated_plugin']['uninstall_reason'] = $args['reason'];
47
+ $this->data['wordpress']['deactivated_plugin']['uninstall_details'] = $args['details'];
48
+
49
+ // Start collecting data
50
+ $this->_collect_data();
51
+ $this->_generate_url();
52
+ $this->request_successful = $this->_send_request();
53
+ }
54
+
55
+ /**
56
+ * Collect all data for the request.
57
+ *
58
+ */
59
+ private function _collect_data() {
60
+
61
+ $current_plugin = get_plugin_data( $this->plugin_file );
62
+
63
+ // Plugin data
64
+ $this->data['wordpress']['deactivated_plugin']['slug'] = $current_plugin['TextDomain'];
65
+ $this->data['wordpress']['deactivated_plugin']['name'] = $current_plugin['Name'];
66
+ $this->data['wordpress']['deactivated_plugin']['version'] = $current_plugin['Version'];
67
+ $this->data['wordpress']['deactivated_plugin']['author'] = $current_plugin['AuthorName'];
68
+
69
+ if ( $this->allow_tracking ) {
70
+ $this->_collect_wordpress_data();
71
+ $this->_collect_server_data();
72
+ $this->_collect_user_data();
73
+ }
74
+
75
+ }
76
+
77
+ /**
78
+ * Collect WordPress data.
79
+ *
80
+ */
81
+ private function _collect_wordpress_data() {
82
+ $this->data['wordpress']['locale'] = ( get_bloginfo( 'version' ) >= 4.7 ) ? get_user_locale() : get_locale();
83
+ $this->data['wordpress']['wp_version'] = get_bloginfo( 'version' );
84
+ $this->data['wordpress']['multisite'] = is_multisite();
85
+
86
+ $this->data['wordpress']['themes'] = $this->get_themes();
87
+ $this->data['wordpress']['plugins'] = $this->get_plugins();
88
+ }
89
+
90
+ /**
91
+ * Collect server data.
92
+ *
93
+ */
94
+ private function _collect_server_data() {
95
+ $this->data['server']['server'] = isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : '';
96
+ $this->data['server']['php_version'] = phpversion();
97
+ $this->data['server']['url'] = home_url();
98
+ }
99
+
100
+ /**
101
+ * Collect user data.
102
+ *
103
+ */
104
+ private function _collect_user_data() {
105
+ $admin = get_user_by( 'email', get_bloginfo( 'admin_email' ) );
106
+ if ( ! $admin ) {
107
+ $this->data['user']['email'] = '';
108
+ $this->data['user']['first_name'] = '';
109
+ $this->data['user']['last_name'] = '';
110
+ }else{
111
+ $this->data['user']['email'] = get_bloginfo( 'admin_email' );
112
+ $this->data['user']['first_name'] = $admin->first_name;
113
+ $this->data['user']['last_name'] = $admin->last_name;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Get current themes
119
+ *
120
+ * @return array
121
+ */
122
+ private function get_themes() {
123
+ $theme = wp_get_theme();
124
+
125
+ return array(
126
+ 'installed' => $this->_get_installed_themes(),
127
+ 'active' => array(
128
+ 'slug' => get_stylesheet(),
129
+ 'name' => $theme->get( 'Name' ),
130
+ 'version' => $theme->get( 'Version' ),
131
+ 'author' => $theme->get( 'Author' ),
132
+ ),
133
+ );
134
+ }
135
+
136
+ /**
137
+ * Get an array of installed themes
138
+ */
139
+ private function _get_installed_themes() {
140
+ $installed = wp_get_themes();
141
+ $theme = get_stylesheet();
142
+ $arr = array();
143
+
144
+ foreach ( $installed as $slug => $info ) {
145
+ if ( $slug === $theme ) {
146
+ continue;
147
+ }
148
+ $arr[ $slug ] = array(
149
+ 'slug' => $slug,
150
+ 'name' => $info->get( 'Name' ),
151
+ 'version' => $info->get( 'Version' ),
152
+ 'author' => $info->get( 'Author' )
153
+ );
154
+ };
155
+
156
+ return $arr;
157
+ }
158
+
159
+ /**
160
+ * Get a list of installed plugins
161
+ */
162
+ private function get_plugins() {
163
+ if ( ! function_exists( 'get_plugins' ) ) {
164
+ include ABSPATH . '/wp-admin/includes/plugin.php';
165
+ }
166
+
167
+ $plugins = get_plugins();
168
+ $option = get_option( 'active_plugins', array() );
169
+ $active = array();
170
+ $installed = array();
171
+ foreach ( $plugins as $id => $info ) {
172
+ if ( in_array( $id, $active ) ) {
173
+ continue;
174
+ }
175
+
176
+ $id = explode( '/', $id );
177
+ $id = ucwords( str_replace( '-', ' ', $id[0] ) );
178
+
179
+ $installed[] = $id;
180
+ }
181
+
182
+ foreach ( $option as $id ) {
183
+ $id = explode( '/', $id );
184
+ $id = ucwords( str_replace( '-', ' ', $id[0] ) );
185
+
186
+ $active[] = $id;
187
+ }
188
+
189
+ return array(
190
+ 'installed' => $installed,
191
+ 'active' => $active,
192
+ );
193
+ }
194
+
195
+ /**
196
+ * Generate the url
197
+ */
198
+ protected function _generate_url() {
199
+ $this->url = $this->url . $this->endpoint;
200
+ }
201
+
202
+ /**
203
+ * Send dat to server.
204
+ *
205
+ */
206
+ private function _send_request() {
207
+
208
+ $request = wp_remote_post( $this->url, array(
209
+ 'method' => 'POST',
210
+ 'timeout' => 20,
211
+ 'redirection' => 5,
212
+ 'httpversion' => '1.1',
213
+ 'blocking' => true,
214
+ 'body' => $this->data,
215
+ 'user-agent' => 'MT/EPSILON-CUSTOMER-TRACKING/' . esc_url( home_url() )
216
+ ) );
217
+
218
+ if ( is_wp_error( $request ) ) {
219
+ return false;
220
+ }
221
+
222
+ return true;
223
+
224
+ }
225
+ }
inc/core.php CHANGED
@@ -1,538 +1,611 @@
1
- <?php
2
-
3
- /*--------------------------------------------------------------------------------------------------------
4
- Plugin Core Functions
5
- ---------------------------------------------------------------------------------------------------------*/
6
-
7
- if( !class_exists( 'Speed_Booster_Pack_Core' ) ) {
8
-
9
- class Speed_Booster_Pack_Core {
10
-
11
- public function __construct() {
12
-
13
- global $sbp_options;
14
- add_action( 'wp_enqueue_scripts', array( $this, 'sbp_no_more_fontawesome'), 9999 );
15
- add_action( 'wp_enqueue_scripts', array( $this, 'sbp_move_scripts_to_footer' ) );
16
- if ( !is_admin() and isset( $sbp_options['jquery_to_footer'] ) ) {
17
- add_action( 'wp_head', array( $this, 'sbp_scripts_to_head' ) );
18
- add_action( 'wp_print_scripts', array( $this, 'sbp_exclude_scripts' ), 100 );
19
- add_action( 'wp_enqueue_scripts', array( $this, 'sbp_exclude_scripts' ), 100 );
20
- }
21
- add_action( 'wp_footer', array( $this, 'sbp_show_page_load_stats' ), 999 );
22
- add_action( 'after_setup_theme', array( $this, 'sbp_junk_header_tags' ) );
23
- add_action( 'init', array( $this, 'sbp_init') );
24
-
25
- $this->sbp_css_optimizer(); // CSS Optimizer functions
26
-
27
- if ( isset( $sbp_options['sbp_css_async'] ) ) {
28
- add_action( 'wp_head', array( $this, 'sbp_except_admin_bar_css' ) );
29
- }
30
-
31
- // Use Google Libraries
32
- if ( !is_admin() and isset( $sbp_options['use_google_libs'] ) ) {
33
- $this->sbp_use_google_libraries();
34
- }
35
-
36
- // Lazy Load
37
- if ( !is_admin() and isset( $sbp_options['lazy_load'] ) ) {
38
- $this->sbp_lazy_load_for_images();
39
- }
40
-
41
- // Minifier
42
- if ( !is_admin() and isset( $sbp_options['minify_html_js'] ) ) {
43
- $this->sbp_minifier();
44
- }
45
-
46
-
47
- // Defer parsing of JavaScript
48
- if ( !is_admin() and isset( $sbp_options['defer_parsing'] ) ) {
49
- add_filter( 'clean_url', array( $this, 'sbp_defer_parsing_of_js' ), 11, 1 );
50
- }
51
-
52
- // Remove query strings from static resources
53
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
54
- add_filter( 'script_loader_src', array( $this, 'sbp_remove_query_strings_1' ), 15, 1 );
55
- }
56
-
57
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
58
- add_filter( 'style_loader_src', array( $this, 'sbp_remove_query_strings_1' ), 15, 1 );
59
- }
60
-
61
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
62
- add_filter( 'script_loader_src', array( $this, 'sbp_remove_query_strings_2' ), 15, 1 );
63
- }
64
-
65
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
66
- add_filter( 'style_loader_src', array( $this, 'sbp_remove_query_strings_2' ), 15, 1 );
67
- }
68
-
69
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
70
- add_filter( 'script_loader_src', array( $this, 'sbp_remove_query_strings_3' ), 15, 1 );
71
- }
72
-
73
- if ( !is_admin() and isset( $sbp_options['query_strings'] ) ) {
74
- add_filter( 'style_loader_src', array( $this, 'sbp_remove_query_strings_3' ), 15, 1 );
75
- }
76
-
77
- // JPEG Compression filter
78
- add_filter( 'jpeg_quality', array( $this, 'filter_image_quality' ) );
79
- add_filter( 'wp_editor_set_quality', array( $this, 'filter_image_quality' ) );
80
-
81
-
82
- } // END public public function __construct
83
-
84
-
85
- /*--------------------------------------------------------------------------------------------------------
86
- Init the CSS Optimizer actions
87
- ---------------------------------------------------------------------------------------------------------*/
88
-
89
- function sbp_init() {
90
-
91
- global $sbp_options;
92
-
93
- if ( wp_is_mobile() and isset ( $sbp_options['sbp_is_mobile'] ) ) { // disable all CSS options on mobile devices
94
- return;
95
- }
96
-
97
- if ( !is_admin() and isset( $sbp_options['sbp_css_async'] ) ) {
98
- add_action( 'wp_print_styles', array( $this, 'sbp_print_styles' ), SBP_FOOTER );
99
- add_action( 'wp_footer', array( $this, 'sbp_print_delayed_styles' ), SBP_FOOTER+1 );
100
- }
101
-
102
- }
103
-
104
-
105
- /*--------------------------------------------------------------------------------------------------------
106
- Add except for the admin toolbar css since the Async CSS removes the dashicons from the toolbar.
107
- ---------------------------------------------------------------------------------------------------------*/
108
-
109
- function sbp_except_admin_bar_css() {
110
-
111
- if ( is_admin_bar_showing() ) { // enqueue the admin tolbar styles only if active
112
- wp_enqueue_style( 'open-sans' );
113
- wp_enqueue_style( 'dashicons' );
114
- wp_enqueue_style( 'admin-bar' );
115
- }
116
-
117
- }
118
-
119
-
120
- /*--------------------------------------------------------------------------------------------------------
121
- Get image quality value if it's set. Otherwise it's set to 90
122
- ---------------------------------------------------------------------------------------------------------*/
123
-
124
- function filter_image_quality() {
125
-
126
- if ( get_option( 'sbp_integer' ) ) {
127
- $sbp_compression = get_option( 'sbp_integer' );
128
- } else {
129
- $sbp_compression = 90;
130
- }
131
-
132
- return $sbp_compression;
133
- }
134
-
135
-
136
- /*--------------------------------------------------------------------------------------------------------
137
- ACTION wp_print_styles
138
- ---------------------------------------------------------------------------------------------------------*/
139
-
140
- function sbp_print_styles() {
141
- global $sbp_styles_are_async;
142
- global $sbp_styles;
143
- global $sbp_options;
144
-
145
- if ( is_admin() || !empty( $sbp_styles_are_async ) ) {
146
- return;
147
- }
148
-
149
- if ( isset( $sbp_options['sbp_css_minify'] ) ) {
150
- $minify = true;
151
- }else{
152
- $minify = false;
153
- }
154
-
155
- $sbp_styles_are_async = true;
156
-
157
- $sbp_styles = sbp_generate_styles_list();
158
-
159
- if ( !isset( $sbp_options['sbp_footer_css'] ) ) {
160
-
161
- $not_inlined = array();
162
-
163
- foreach ( $sbp_styles as $style ) {
164
- echo "<style type=\"text/css\" ".($style['media'] ? "media=\"{$style['media']}\"" : '' ).">";
165
- if (!sbp_inline_css($style['src'],$minify)){
166
- $not_inlined[] = $style;
167
- }
168
- echo "</style>";
169
- }
170
- if ( !empty( $not_inlined) ) {
171
- foreach ( $not_inlined as $style ){
172
- ?><link rel="stylesheet" href="<?php echo $style['src']?>" type="text/css" <?php echo $style['media'] ? "media=\"{$style['media']}\"" : ''?> /><?php
173
- }
174
- }
175
- }
176
-
177
- sbp_unregister_styles();
178
- }
179
-
180
-
181
- /*--------------------------------------------------------------------------------------------------------
182
- ACTION wp_footer
183
- ---------------------------------------------------------------------------------------------------------*/
184
-
185
- function sbp_print_delayed_styles() {
186
-
187
- global $sbp_styles;
188
- global $sbp_options;
189
-
190
- if ( isset( $sbp_options['sbp_css_minify'] ) ) {
191
- $minify = true;
192
- }else{
193
- $minify = false;
194
- }
195
-
196
- if ( isset( $sbp_options['sbp_footer_css'] ) ) {
197
-
198
- $not_inlined = array();
199
- foreach ( $sbp_styles as $style ) {
200
- echo "<style type=\"text/css\" ".($style['media'] ? "media=\"{$style['media']}\"" : '' ).">";
201
- if ( !sbp_inline_css($style['src'],$minify) ) {
202
- $not_inlined[] = $style;
203
- }
204
- echo "</style>";
205
- }
206
- if ( !empty( $not_inlined ) ) {
207
- foreach ( $not_inlined as $style ) {
208
- ?><link rel="stylesheet" href="<?php echo $style['src']?>" type="text/css" <?php echo $style['media'] ? "media=\"{$style['media']}\"" : ''?> /><?php
209
- }
210
- }
211
- }
212
- }
213
-
214
-
215
- /*--------------------------------------------------------------------------------------------------------
216
- Moves scripts to the footer to decrease page load times, while keeping stylesheets in the header
217
- ---------------------------------------------------------------------------------------------------------*/
218
-
219
- function sbp_move_scripts_to_footer() {
220
-
221
- global $sbp_options;
222
-
223
- if ( !is_admin() and isset( $sbp_options['jquery_to_footer'] ) ) {
224
-
225
- remove_action( 'wp_head', 'wp_print_scripts' );
226
- remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
227
- remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
228
-
229
- }
230
-
231
- } // END function sbp_move_scripts_to_footer
232
-
233
-
234
- /*--------------------------------------------------------------------------------------------------------
235
- Exclude scripts from "Move scripts to footer" option
236
- ---------------------------------------------------------------------------------------------------------*/
237
-
238
- public function sbp_exclude_scripts() {
239
-
240
-
241
- if ( get_option( 'sbp_js_footer_exceptions1' ) ) {
242
- $sbp_handle1 = esc_html( get_option( 'sbp_js_footer_exceptions1' ) );
243
- }
244
-
245
- if ( get_option( 'sbp_js_footer_exceptions2' ) ) {
246
- $sbp_handle2 = esc_html( get_option( 'sbp_js_footer_exceptions2' ) );
247
- }
248
-
249
- if ( get_option( 'sbp_js_footer_exceptions3' ) ) {
250
- $sbp_handle3 = esc_html( get_option( 'sbp_js_footer_exceptions3' ) );
251
- }
252
-
253
- if ( get_option( 'sbp_js_footer_exceptions4' ) ) {
254
- $sbp_handle4 = esc_html( get_option( 'sbp_js_footer_exceptions4' ) );
255
- }
256
-
257
- $sbp_enq = 'enqueued';
258
- $sbp_reg = 'registered';
259
- $sbp_done = 'done';
260
-
261
- /*--------------------------------------------------------------------------------------------------------*/
262
-
263
- if ( get_option( 'sbp_js_footer_exceptions1' ) and wp_script_is( $sbp_handle1 , $sbp_enq ) ) {
264
- wp_dequeue_script( $sbp_handle1 );
265
- }
266
-
267
- if ( get_option( 'sbp_js_footer_exceptions2' ) and wp_script_is( $sbp_handle2 , $sbp_enq ) ) {
268
- wp_dequeue_script( $sbp_handle2 );
269
- }
270
-
271
- if ( get_option( 'sbp_js_footer_exceptions3' ) and wp_script_is( $sbp_handle3 , $sbp_enq ) ) {
272
- wp_dequeue_script( $sbp_handle3 );
273
- }
274
-
275
- if ( get_option( 'sbp_js_footer_exceptions4' ) and wp_script_is( $sbp_handle4 , $sbp_enq ) ) {
276
- wp_dequeue_script( $sbp_handle4 );
277
- }
278
-
279
- /*--------------------------------------------------------------------------------------------------------*/
280
-
281
- if ( get_option( 'sbp_js_footer_exceptions1' ) and wp_script_is( $sbp_handle1 , $sbp_reg ) ) {
282
- wp_deregister_script( $sbp_handle1 );
283
- }
284
-
285
- if ( get_option( 'sbp_js_footer_exceptions2' ) and wp_script_is( $sbp_handle2 , $sbp_reg ) ) {
286
- wp_deregister_script( $sbp_handle2 );
287
- }
288
-
289
- if ( get_option( 'sbp_js_footer_exceptions3' ) and wp_script_is( $sbp_handle3 , $sbp_reg ) ) {
290
- wp_deregister_script( $sbp_handle3 );
291
- }
292
-
293
- if ( get_option( 'sbp_js_footer_exceptions4' ) and wp_script_is( $sbp_handle4 , $sbp_reg ) ) {
294
- wp_deregister_script( $sbp_handle4 );
295
- }
296
-
297
- /*--------------------------------------------------------------------------------------------------------*/
298
-
299
- if ( get_option( 'sbp_js_footer_exceptions1' ) and wp_script_is( $sbp_handle1 , $sbp_done ) ) {
300
- wp_deregister_script( $sbp_handle1 );
301
- }
302
-
303
- if ( get_option( 'sbp_js_footer_exceptions2' ) and wp_script_is( $sbp_handle2 , $sbp_done ) ) {
304
- wp_deregister_script( $sbp_handle2 );
305
- }
306
-
307
- if ( get_option( 'sbp_js_footer_exceptions3' ) and wp_script_is( $sbp_handle3 , $sbp_done ) ) {
308
- wp_deregister_script( $sbp_handle3 );
309
- }
310
-
311
- if ( get_option( 'sbp_js_footer_exceptions4' ) and wp_script_is( $sbp_handle4 , $sbp_done ) ) {
312
- wp_deregister_script( $sbp_handle4 );
313
- }
314
-
315
- }
316
-
317
-
318
- /*--------------------------------------------------------------------------------------------------------
319
- Put scripts back to the head
320
- ---------------------------------------------------------------------------------------------------------*/
321
-
322
- public function sbp_scripts_to_head() {
323
-
324
- if ( get_option( 'sbp_head_html_script1' ) ) {
325
- echo get_option( 'sbp_head_html_script1' ) . "\n";
326
-
327
- }
328
-
329
- if ( get_option( 'sbp_head_html_script2' ) ) {
330
- echo get_option( 'sbp_head_html_script2' ) . "\n";
331
- }
332
-
333
- if ( get_option( 'sbp_head_html_script3' ) ) {
334
- echo get_option( 'sbp_head_html_script3' ) . "\n";
335
- }
336
-
337
- if ( get_option( 'sbp_head_html_script4' ) ) {
338
- echo get_option( 'sbp_head_html_script4' ) . "\n";
339
- }
340
-
341
- }
342
-
343
-
344
- /*--------------------------------------------------------------------------------------------------------
345
- Show Number of Queries and Page Load Time
346
- ---------------------------------------------------------------------------------------------------------*/
347
-
348
- function sbp_show_page_load_stats() {
349
- $timer_stop = timer_stop( 0, 2 ); // to display milliseconds instead of seconds usethe following: $timer_stop = 1000 * ( float ) timer_stop( 0, 4 );
350
- $get_num_queries = get_num_queries();
351
- update_option( 'sbp_page_time', $timer_stop );
352
- update_option( 'sbp_page_queries', $get_num_queries );
353
- }
354
-
355
-
356
- /*--------------------------------------------------------------------------------------------------------
357
- Use Google Libraries
358
- ---------------------------------------------------------------------------------------------------------*/
359
-
360
- function sbp_use_google_libraries() {
361
-
362
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/use-google-libraries.php' );
363
-
364
- if ( class_exists( 'SBP_GoogleLibraries' ) ) {
365
- SBP_GoogleLibraries::configure_plugin();
366
-
367
- }
368
-
369
- } // End function sbp_use_google_libraries()
370
-
371
-
372
- /*--------------------------------------------------------------------------------------------------------
373
- Lazy Load for images
374
- ---------------------------------------------------------------------------------------------------------*/
375
-
376
- function sbp_lazy_load_for_images() {
377
-
378
- if ( !class_exists( 'CrazyLazy' ) ) {
379
- require_once(SPEED_BOOSTER_PACK_PATH . 'inc/crazy-lazy.php');
380
- }
381
- } // End function sbp_lazy_load_for_images()
382
-
383
-
384
-
385
- /*--------------------------------------------------------------------------------------------------------
386
- Minify HTML and Javascripts
387
- ---------------------------------------------------------------------------------------------------------*/
388
-
389
- function sbp_minifier() {
390
-
391
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/sbp-minifier.php' );
392
- } // End function sbp_minifier()
393
-
394
-
395
- /*--------------------------------------------------------------------------------------------------------
396
- CSS Optimizer
397
- ---------------------------------------------------------------------------------------------------------*/
398
-
399
- function sbp_css_optimizer() {
400
-
401
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/css-optimizer.php' );
402
-
403
- } // End function sbp_css_optimizer()
404
-
405
-
406
- /*--------------------------------------------------------------------------------------------------------
407
- Defer parsing of JavaScript and exclusion files
408
- ---------------------------------------------------------------------------------------------------------*/
409
-
410
- function sbp_defer_parsing_of_js ( $url ) {
411
-
412
- if ( get_option( 'sbp_defer_exceptions1' ) ) {
413
- $defer_exclude1 = get_option( 'sbp_defer_exceptions1' );
414
- }
415
-
416
- if ( get_option( 'sbp_defer_exceptions2' ) ) {
417
- $defer_exclude2 = get_option( 'sbp_defer_exceptions2' );
418
- }
419
-
420
- if ( get_option( 'sbp_defer_exceptions3' ) ) {
421
- $defer_exclude3 = get_option( 'sbp_defer_exceptions3' );
422
- }
423
-
424
- if ( get_option( 'sbp_defer_exceptions4' ) ) {
425
- $defer_exclude4 = get_option( 'sbp_defer_exceptions4' );
426
- }
427
-
428
-
429
- if ( FALSE === strpos( $url, '.js' ) ) {
430
- return $url;
431
- }
432
-
433
-
434
- if ( get_option( 'sbp_defer_exceptions1' ) and strpos( $url, $defer_exclude1 ) ) {
435
- return $url;
436
- }
437
-
438
- if ( get_option( 'sbp_defer_exceptions2' ) and strpos( $url, $defer_exclude2 ) ) {
439
- return $url;
440
- }
441
-
442
- if ( get_option( 'sbp_defer_exceptions3' ) and strpos( $url, $defer_exclude3 ) ) {
443
- return $url;
444
- }
445
-
446
- if ( get_option( 'sbp_defer_exceptions4' ) and strpos( $url, $defer_exclude4 ) ) {
447
- return $url;
448
- }
449
-
450
- return "$url' defer='defer";
451
-
452
- } // END function sbp_defer_parsing_of_js
453
-
454
-
455
- /*--------------------------------------------------------------------------------------------------------
456
- Remove query strings from static resources
457
- ---------------------------------------------------------------------------------------------------------*/
458
-
459
- function sbp_remove_query_strings_1( $src ) { // remove "?ver" string
460
- $rqsfsr = explode( '?ver', $src );
461
- return $rqsfsr[0];
462
- }
463
-
464
- function sbp_remove_query_strings_2( $src ) { // remove "&ver" string
465
- $rqsfsr = explode( '&ver', $src );
466
- return $rqsfsr[0];
467
- }
468
-
469
- function sbp_remove_query_strings_3( $src ) { // remove "?rev" string from Revolution Slider plugin
470
- $rqsfsr = explode( '?rev', $src );
471
- return $rqsfsr[0];
472
- }
473
-
474
-
475
- /*--------------------------------------------------------------------------------------------------------
476
- Dequeue extra Font Awesome stylesheet
477
- ---------------------------------------------------------------------------------------------------------*/
478
-
479
- function sbp_no_more_fontawesome() {
480
- global $wp_styles;
481
- global $sbp_options;
482
-
483
- // we'll use preg_match to find only the following patterns as exact matches, to prevent other plugin stylesheets that contain font-awesome expression to be also dequeued
484
- $patterns = array(
485
- 'font-awesome.css',
486
- 'font-awesome.min.css'
487
- );
488
- // multiple patterns hook
489
- $regex = '/(' .implode('|', $patterns) .')/i';
490
- foreach( $wp_styles -> registered as $registered ) {
491
- if( !is_admin() and preg_match( $regex, $registered->src) and isset( $sbp_options['font_awesome'] ) ) {
492
- wp_dequeue_style( $registered->handle );
493
- // FA was dequeued, so here we need to enqueue it again from CDN
494
- wp_enqueue_style( 'font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css' );
495
- } // END if( preg_match...
496
- } // END foreach
497
- } // End function dfa_no_more_fontawesome
498
-
499
-
500
- /*--------------------------------------------------------------------------------------------------------
501
- Remove junk header tags
502
- ---------------------------------------------------------------------------------------------------------*/
503
-
504
- public function sbp_junk_header_tags() {
505
-
506
- global $sbp_options;
507
-
508
- // Remove Adjacent Posts links PREV/NEXT
509
- if ( isset( $sbp_options['remove_adjacent'] ) ) {
510
- remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' );
511
- }
512
-
513
- // Remove Windows Live Writer Manifest Link
514
- if ( isset( $sbp_options['wml_link'] ) ) {
515
- remove_action( 'wp_head', 'wlwmanifest_link' );
516
- }
517
-
518
- // Remove WordPress Shortlinks from WP Head
519
- if ( isset( $sbp_options['remove_wsl'] ) ) {
520
- remove_action( 'wp_head', 'wp_shortlink_wp_head' );
521
- }
522
-
523
- // Remove WP Generator/Version - for security reasons and cleaning the header
524
- if ( isset( $sbp_options['wp_generator'] ) ) {
525
- remove_action('wp_head', 'wp_generator');
526
- }
527
-
528
- // Remove all feeds
529
- if ( isset( $sbp_options['remove_all_feeds'] ) ) {
530
- remove_action( 'wp_head', 'feed_links_extra', 3 ); // remove the feed links from the extra feeds such as category feeds
531
- remove_action( 'wp_head', 'feed_links', 2 ); // remove the feed links from the general feeds: Post and Comment Feed
532
- }
533
-
534
- } // END public function sbp_junk_header_tags
535
-
536
- } // END class Speed_Booster_Pack_Core
537
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  } // END if(!class_exists('Speed_Booster_Pack_Core'))
1
+ <?php
2
+
3
+ /*--------------------------------------------------------------------------------------------------------
4
+ Plugin Core Functions
5
+ ---------------------------------------------------------------------------------------------------------*/
6
+
7
+ if ( ! class_exists( 'Speed_Booster_Pack_Core' ) ) {
8
+
9
+ class Speed_Booster_Pack_Core {
10
+
11
+ public function __construct() {
12
+
13
+ global $sbp_options;
14
+
15
+ add_action( 'wp_enqueue_scripts', array( $this, 'sbp_no_more_fontawesome' ), 9999 );
16
+ add_action( 'wp_enqueue_scripts', array( $this, 'sbp_move_scripts_to_footer' ) );
17
+ if ( ! is_admin() and isset( $sbp_options['jquery_to_footer'] ) ) {
18
+ add_action( 'wp_head', array( $this, 'sbp_scripts_to_head' ) );
19
+ }
20
+ add_action( 'init', array( $this, 'sbp_show_page_load_stats' ), 999 );
21
+ add_action( 'after_setup_theme', array( $this, 'sbp_junk_header_tags' ) );
22
+ add_action( 'init', array( $this, 'sbp_init' ) );
23
+
24
+
25
+ $this->sbp_css_optimizer(); // CSS Optimizer functions
26
+
27
+
28
+ // Use Google Libraries
29
+ if ( ! is_admin() and isset( $sbp_options['use_google_libs'] ) ) {
30
+ $this->sbp_use_google_libraries();
31
+ }
32
+
33
+
34
+
35
+ // Minifier
36
+ if ( ! is_admin() and isset( $sbp_options['minify_html_js'] ) ) {
37
+ $this->sbp_minifier();
38
+ }
39
+
40
+ // Defer parsing of JavaScript
41
+ if ( ! is_admin() and isset( $sbp_options['defer_parsing'] ) ) {
42
+ add_filter( 'script_loader_tag', array( $this, 'sbp_defer_parsing_of_js' ), 10, 3 );
43
+ }
44
+
45
+ // Remove query strings from static resources
46
+ if ( ! is_admin() and isset( $sbp_options['query_strings'] ) ) {
47
+ add_filter( 'script_loader_src', array( $this, 'sbp_remove_query_strings' ), 15, 1 );
48
+ add_filter( 'style_loader_src', array( $this, 'sbp_remove_query_strings' ), 15, 1 );
49
+ }
50
+
51
+
52
+ // JPEG Compression filter
53
+ add_filter( 'jpeg_quality', array( $this, 'filter_image_quality' ) );
54
+ add_filter( 'wp_editor_set_quality', array( $this, 'filter_image_quality' ) );
55
+
56
+
57
+ /**
58
+ * @since 3.7
59
+ */
60
+ // Disable emojis
61
+ if ( ! is_admin() && isset( $sbp_options['remove_emojis'] ) ) {
62
+ add_action( 'init', array( $this, 'sbp_disable_emojis' ) );
63
+ }
64
+
65
+ /**
66
+ * @since 3.7
67
+ */
68
+ // Disable XML-RPC
69
+ if ( ! isset( $sbp_options['disable_xmlrpc'] ) ) {
70
+ add_filter( 'xmlrpc_enabled', '__return_false' );
71
+ add_filter( 'wp_headers', array( $this, 'sbp_remove_x_pingback' ) );
72
+ add_filter( 'pings_open', '__return_false', 9999 );
73
+ }
74
+
75
+ } // END public public function __construct
76
+
77
+
78
+ /*--------------------------------------------------------------------------------------------------------
79
+ Init the CSS Optimizer actions
80
+ ---------------------------------------------------------------------------------------------------------*/
81
+
82
+ function sbp_init() {
83
+
84
+ global $sbp_options;
85
+
86
+ if ( wp_is_mobile() and isset ( $sbp_options['sbp_is_mobile'] ) ) { // disable all CSS options on mobile devices
87
+ return;
88
+ }
89
+
90
+ if ( ! is_admin() and isset( $sbp_options['sbp_css_async'] ) ) {
91
+ add_action( 'wp_print_styles', array( $this, 'sbp_print_styles' ), SBP_FOOTER );
92
+ add_action( 'wp_footer', array( $this, 'sbp_print_delayed_styles' ), SBP_FOOTER + 1 );
93
+ }
94
+
95
+ }
96
+
97
+
98
+ /*--------------------------------------------------------------------------------------------------------
99
+ Get image quality value if it's set. Otherwise it's set to 90
100
+ ---------------------------------------------------------------------------------------------------------*/
101
+
102
+ function filter_image_quality() {
103
+
104
+ if ( get_option( 'sbp_integer' ) ) {
105
+ $sbp_compression = get_option( 'sbp_integer' );
106
+ } else {
107
+ $sbp_compression = 75; //@since v3.7
108
+ }
109
+
110
+ return $sbp_compression;
111
+ }
112
+
113
+
114
+ /*--------------------------------------------------------------------------------------------------------
115
+ ACTION wp_print_styles
116
+ ---------------------------------------------------------------------------------------------------------*/
117
+
118
+ function sbp_print_styles() {
119
+ global $sbp_styles_are_async;
120
+ global $sbp_styles;
121
+ global $sbp_options;
122
+
123
+ if ( isset( $sbp_options['sbp_css_minify'] ) ) {
124
+ $minify = true;
125
+ } else {
126
+ $minify = false;
127
+ }
128
+
129
+ $sbp_styles_are_async = true;
130
+
131
+ $sbp_styles = sbp_generate_styles_list();
132
+
133
+ if ( ! isset( $sbp_options['sbp_footer_css'] ) ) {
134
+
135
+ $not_inlined = array();
136
+
137
+ foreach ( $sbp_styles as $style ) {
138
+ echo "<style type=\"text/css\" " . ( $style['media'] ? "media=\"{$style['media']}\"" : '' ) . ">";
139
+ if ( ! sbp_inline_css( $style['src'], $minify ) ) {
140
+ $not_inlined[] = $style;
141
+ }
142
+ echo "</style>";
143
+ }
144
+ if ( ! empty( $not_inlined ) ) {
145
+ foreach ( $not_inlined as $style ) {
146
+ ?>
147
+ <link rel="stylesheet" href="<?php echo $style['src'] ?>" type="text/css" <?php echo $style['media'] ? "media=\"{$style['media']}\"" : '' ?> /><?php
148
+ }
149
+ }
150
+ }
151
+
152
+ sbp_unregister_styles();
153
+ }
154
+
155
+
156
+ /*--------------------------------------------------------------------------------------------------------
157
+ ACTION wp_footer
158
+ ---------------------------------------------------------------------------------------------------------*/
159
+
160
+ function sbp_print_delayed_styles() {
161
+ global $sbp_styles;
162
+ global $sbp_options;
163
+
164
+ if ( isset( $sbp_options['sbp_css_minify'] ) ) {
165
+ $minify = true;
166
+ } else {
167
+ $minify = false;
168
+ }
169
+
170
+ if ( isset( $sbp_options['sbp_footer_css'] ) ) {
171
+
172
+ $not_inlined = array();
173
+ foreach ( $sbp_styles as $style ) {
174
+ echo "<style type=\"text/css\" " . ( $style['media'] ? "media=\"{$style['media']}\"" : '' ) . ">";
175
+ if ( ! sbp_inline_css( $style['src'], $minify ) ) {
176
+ $not_inlined[] = $style;
177
+ }
178
+ echo "</style>";
179
+ }
180
+ if ( ! empty( $not_inlined ) ) {
181
+ foreach ( $not_inlined as $style ) {
182
+ ?>
183
+ <link rel="stylesheet" href="<?php echo $style['src'] ?>" type="text/css" <?php echo $style['media'] ? "media=\"{$style['media']}\"" : '' ?> /><?php
184
+ }
185
+ }
186
+ }
187
+ }
188
+
189
+
190
+ /*--------------------------------------------------------------------------------------------------------
191
+ Moves scripts to the footer to decrease page load times, while keeping stylesheets in the header
192
+ ---------------------------------------------------------------------------------------------------------*/
193
+
194
+ function sbp_move_scripts_to_footer() {
195
+
196
+ global $sbp_options;
197
+
198
+ if ( ! is_admin() and isset( $sbp_options['jquery_to_footer'] ) ) {
199
+
200
+ remove_action( 'wp_head', 'wp_print_scripts' );
201
+ remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
202
+ remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
203
+
204
+ }
205
+
206
+ } // END function sbp_move_scripts_to_footer
207
+
208
+
209
+ /*--------------------------------------------------------------------------------------------------------
210
+ Put scripts back to the head
211
+ ---------------------------------------------------------------------------------------------------------*/
212
+
213
+ public function sbp_scripts_to_head() {
214
+
215
+
216
+ if ( get_option( 'sbp_head_html_script1' ) ) {
217
+ echo get_option( 'sbp_head_html_script1' ) . "\n";
218
+ }
219
+
220
+ if ( get_option( 'sbp_head_html_script2' ) ) {
221
+ echo get_option( 'sbp_head_html_script2' ) . "\n";
222
+ }
223
+
224
+ if ( get_option( 'sbp_head_html_script3' ) ) {
225
+ echo get_option( 'sbp_head_html_script3' ) . "\n";
226
+ }
227
+
228
+ if ( get_option( 'sbp_head_html_script4' ) ) {
229
+ echo get_option( 'sbp_head_html_script4' ) . "\n";
230
+ }
231
+
232
+ /**
233
+ * Default: add jQuery to header always
234
+ *
235
+ * @since 3.7
236
+ */
237
+ global $wp_scripts;
238
+ $js_footer_exceptions1 = '';
239
+ $js_footer_exceptions2 = '';
240
+ $js_footer_exceptions3 = '';
241
+ $js_footer_exceptions4 = '';
242
+
243
+ if ( get_option( 'sbp_js_footer_exceptions1' ) ) {
244
+ $js_footer_exceptions1 = get_option( 'sbp_js_footer_exceptions1' );
245
+ }
246
+
247
+ if ( get_option( 'sbp_js_footer_exceptions2' ) ) {
248
+ $js_footer_exceptions2 = get_option( 'sbp_js_footer_exceptions2' );
249
+ }
250
+
251
+ if ( get_option( 'sbp_js_footer_exceptions3' ) ) {
252
+ $js_footer_exceptions3 = get_option( 'sbp_js_footer_exceptions3' );
253
+ }
254
+
255
+ if ( get_option( 'sbp_js_footer_exceptions4' ) ) {
256
+ $js_footer_exceptions4 = get_option( 'sbp_js_footer_exceptions4' );
257
+ }
258
+
259
+ $sbp_enq = 'enqueued';
260
+ $sbp_reg = 'registered';
261
+ $sbp_done = 'done';
262
+
263
+ /**
264
+ * Echo jQuery in header all the time, if none of the other options contain in
265
+ *
266
+ * @since 3.7
267
+ *
268
+ * New solution, going forward so not to crash so many sites anymore
269
+ *
270
+ * This should come BEFORE the fallback function, since jQuery should be ALWAYS
271
+ * the first loaded script.
272
+ *
273
+ */
274
+ if ( $js_footer_exceptions1 !== 'jquery-core' || $js_footer_exceptions2 !== 'jquery-core' || $js_footer_exceptions3 !== 'jquery-core' || $js_footer_exceptions4 !== 'jquery-core' ) {
275
+
276
+ // if the script actually exists, dequeue it and re-add it for header inclusion
277
+ $script_src = $wp_scripts->registered['jquery-core']->src;
278
+
279
+ if ( strpos( $script_src, 'wp-includes' ) == true ) { // it's a local resource, append wordpress installation URL
280
+ echo '<script type="text/javascript" src="' . get_site_url() . esc_attr( $script_src ) . '"></script>';
281
+ } else {
282
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
283
+ }
284
+
285
+ // deregister & dequeue the script
286
+ wp_deregister_script( 'jquery-core' );
287
+ wp_dequeue_script( 'jquery-core' );
288
+ }
289
+
290
+
291
+ /**
292
+ * Echo the scripts in the header
293
+ *
294
+ * @since 3.7
295
+ *
296
+ * Fallback for previous plugin users
297
+ *
298
+ */
299
+ if ( array_key_exists( $js_footer_exceptions1, $wp_scripts->registered ) ) {
300
+ $script_src = '';
301
+ // if the script actually exists, dequeue it and re-add it for header inclusion
302
+ $script_src = $wp_scripts->registered[ $js_footer_exceptions1 ]->src;
303
+
304
+ if ( strpos( $script_src, 'wp-includes' ) == true ) { // it's a local resource, append wordpress installation URL
305
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
306
+ } else {
307
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
308
+ }
309
+ }
310
+
311
+ if ( array_key_exists( $js_footer_exceptions2, $wp_scripts->registered ) ) {
312
+ $script_src = '';
313
+ // if the script actually exists, dequeue it and re-add it for header inclusion
314
+ $script_src = $wp_scripts->registered[ $js_footer_exceptions2 ]->src;
315
+
316
+ if ( strpos( $script_src, 'wp-includes' ) == true ) {
317
+ echo '<script type="text/javascript" src="' . get_site_url() . esc_attr( $script_src ) . '"></script>';
318
+ } else {
319
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
320
+ }
321
+ }
322
+
323
+ if ( array_key_exists( $js_footer_exceptions3, $wp_scripts->registered ) ) {
324
+ $script_src = '';
325
+ // if the script actually exists, dequeue it and re-add it for header inclusion
326
+ $script_src = $wp_scripts->registered[ $js_footer_exceptions3 ]->src;
327
+
328
+ if ( strpos( $script_src, 'wp-includes' ) == true ) {
329
+ echo '<script type="text/javascript" src="' . get_site_url() . esc_attr( $script_src ) . '"></script>';
330
+ } else {
331
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
332
+ }
333
+
334
+ }
335
+
336
+ if ( array_key_exists( $js_footer_exceptions4, $wp_scripts->registered ) ) {
337
+ $script_src = '';
338
+ // if the script actually exists, dequeue it and re-add it for header inclusion
339
+ $script_src = $wp_scripts->registered[ $js_footer_exceptions4 ]->src;
340
+
341
+ if ( strpos( $script_src, 'wp-includes' ) == true ) { // it's a local resource, append wordpress installation URL
342
+ echo '<script type="text/javascript" src="' . get_site_url() . esc_attr( $script_src ) . '"></script>';
343
+ } else {
344
+ echo '<script type="text/javascript" src="' . esc_attr( $script_src ) . '"></script>';
345
+ }
346
+ }
347
+
348
+
349
+ /**
350
+ * De-register the scripts from other parts of the site since they're already echo-ed in the header
351
+ */
352
+ /*--------------------------------------------------------------------------------------------------------*/
353
+ if ( ! empty( $sbp_js_footer_exceptions1 ) and wp_script_is( $js_footer_exceptions1, $sbp_enq ) ) {
354
+ wp_dequeue_script( $js_footer_exceptions1 );
355
+ }
356
+ if ( ! empty( $sbp_js_footer_exceptions2 ) and wp_script_is( $js_footer_exceptions2, $sbp_enq ) ) {
357
+ wp_dequeue_script( $js_footer_exceptions2 );
358
+ }
359
+ if ( ! empty( $sbp_js_footer_exceptions3 ) and wp_script_is( $js_footer_exceptions3, $sbp_enq ) ) {
360
+ wp_dequeue_script( $sbp_js_footer_exceptions3 );
361
+ }
362
+ if ( ! empty( $sbp_js_footer_exceptions4 ) and wp_script_is( $js_footer_exceptions4, $sbp_enq ) ) {
363
+ wp_dequeue_script( $sbp_js_footer_exceptions4 );
364
+ }
365
+ /*--------------------------------------------------------------------------------------------------------*/
366
+ if ( ! empty( $js_footer_exceptions1 ) and wp_script_is( $js_footer_exceptions1, $sbp_reg ) ) {
367
+ wp_deregister_script( $js_footer_exceptions1 );
368
+ }
369
+ if ( ! empty( $js_footer_exceptions2 ) and wp_script_is( $js_footer_exceptions2, $sbp_reg ) ) {
370
+ wp_deregister_script( $js_footer_exceptions2 );
371
+ }
372
+ if ( ! empty( $js_footer_exceptions3 ) and wp_script_is( $js_footer_exceptions3, $sbp_reg ) ) {
373
+ wp_deregister_script( $js_footer_exceptions3 );
374
+ }
375
+ if ( ! empty( $js_footer_exceptions4 ) and wp_script_is( $js_footer_exceptions4, $sbp_reg ) ) {
376
+ wp_deregister_script( $js_footer_exceptions4 );
377
+ }
378
+ /*--------------------------------------------------------------------------------------------------------*/
379
+ if ( ! empty( $js_footer_exceptions1 ) and wp_script_is( $js_footer_exceptions1, $sbp_done ) ) {
380
+ wp_deregister_script( $js_footer_exceptions1 );
381
+ }
382
+ if ( ! empty( $js_footer_exceptions2 ) and wp_script_is( $js_footer_exceptions2, $sbp_done ) ) {
383
+ wp_deregister_script( $js_footer_exceptions2 );
384
+ }
385
+ if ( ! empty( $js_footer_exceptions3 ) and wp_script_is( $js_footer_exceptions3, $sbp_done ) ) {
386
+ wp_deregister_script( $js_footer_exceptions3 );
387
+ }
388
+ if ( ! empty( $js_footer_exceptions4 ) and wp_script_is( $js_footer_exceptions4, $sbp_done ) ) {
389
+ wp_deregister_script( $js_footer_exceptions4 );
390
+ }
391
+
392
+ }
393
+
394
+
395
+ /*--------------------------------------------------------------------------------------------------------
396
+ Show Number of Queries and Page Load Time
397
+ ---------------------------------------------------------------------------------------------------------*/
398
+
399
+ function sbp_show_page_load_stats() {
400
+ $timer_stop = timer_stop( 0, 2 ); // to display milliseconds instead of seconds usethe following: $timer_stop = 1000 * ( float ) timer_stop( 0, 4 );
401
+ $get_num_queries = get_num_queries();
402
+ update_option( 'sbp_page_time', $timer_stop );
403
+ update_option( 'sbp_page_queries', $get_num_queries );
404
+ }
405
+
406
+
407
+ /*--------------------------------------------------------------------------------------------------------
408
+ Use Google Libraries
409
+ ---------------------------------------------------------------------------------------------------------*/
410
+
411
+ function sbp_use_google_libraries() {
412
+
413
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/use-google-libraries.php' );
414
+
415
+ if ( class_exists( 'SBP_GoogleLibraries' ) ) {
416
+ SBP_GoogleLibraries::configure_plugin();
417
+
418
+ }
419
+
420
+ } // End function sbp_use_google_libraries()
421
+
422
+
423
+
424
+
425
+ /*--------------------------------------------------------------------------------------------------------
426
+ Minify HTML and Javascripts
427
+ ---------------------------------------------------------------------------------------------------------*/
428
+
429
+ function sbp_minifier() {
430
+
431
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/sbp-minifier.php' );
432
+ } // End function sbp_minifier()
433
+
434
+
435
+ /*--------------------------------------------------------------------------------------------------------
436
+ CSS Optimizer
437
+ ---------------------------------------------------------------------------------------------------------*/
438
+
439
+ function sbp_css_optimizer() {
440
+
441
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/css-optimizer.php' );
442
+
443
+ } // End function sbp_css_optimizer()
444
+
445
+ /*--------------------------------------------------------------------------------------------------------
446
+ Defer parsing of JavaScript and exclusion files
447
+ ---------------------------------------------------------------------------------------------------------*/
448
+
449
+ function sbp_defer_parsing_of_js( $tag, $handle, $src ) {
450
+
451
+ $defer_exclude1 = '';
452
+ $defer_exclude2 = '';
453
+ $defer_exclude3 = '';
454
+ $defer_exclude4 = '';
455
+
456
+ if ( get_option( 'sbp_defer_exceptions1' ) ) {
457
+ $defer_exclude1 = get_option( 'sbp_defer_exceptions1' );
458
+ }
459
+
460
+ if ( get_option( 'sbp_defer_exceptions2' ) ) {
461
+ $defer_exclude2 = get_option( 'sbp_defer_exceptions2' );
462
+ }
463
+
464
+ if ( get_option( 'sbp_defer_exceptions3' ) ) {
465
+ $defer_exclude3 = get_option( 'sbp_defer_exceptions3' );
466
+ }
467
+
468
+ if ( get_option( 'sbp_defer_exceptions4' ) ) {
469
+ $defer_exclude4 = get_option( 'sbp_defer_exceptions4' );
470
+ }
471
+
472
+ $array_with_values[] = $defer_exclude1;
473
+ $array_with_values[] = $defer_exclude2;
474
+ $array_with_values[] = $defer_exclude3;
475
+ $array_with_values[] = $defer_exclude4;
476
+
477
+ $array_with_values = apply_filters( 'sbp_exclude_defer_scripts', $array_with_values ); // possibility of extending this via filters
478
+ $array_with_values = array_filter( $array_with_values ); // remove empty entries
479
+
480
+
481
+ if ( ! in_array( $handle, $array_with_values ) ) {
482
+ return '<script src="' . $src . '" defer="defer" type="text/javascript"></script>' . "\n";
483
+ }
484
+
485
+ return $tag;
486
+
487
+ } // END function sbp_defer_parsing_of_js
488
+
489
+
490
+ /*--------------------------------------------------------------------------------------------------------
491
+ Remove query strings from static resources
492
+ ---------------------------------------------------------------------------------------------------------*/
493
+
494
+ function sbp_remove_query_strings( $src ) { // remove "?ver" string
495
+
496
+ $output = preg_split( "/(\?rev|&ver|\?ver)/", $src );
497
+
498
+ return $output[0];
499
+
500
+ }
501
+
502
+ /*--------------------------------------------------------------------------------------------------------
503
+ Disable Emoji
504
+ ---------------------------------------------------------------------------------------------------------*/
505
+ function sbp_disable_emojis() {
506
+ remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
507
+ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
508
+ remove_action( 'wp_print_styles', 'print_emoji_styles' );
509
+ remove_action( 'admin_print_styles', 'print_emoji_styles' );
510
+ remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
511
+ remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
512
+ remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
513
+
514
+ add_filter( 'tiny_mce_plugins', array( $this, 'sbp_disable_emojis_tinymce' ) );
515
+ add_filter( 'wp_resource_hints', array( $this, 'sbp_disable_emojis_dns_prefetch' ), 10, 2 );
516
+ }
517
+
518
+ function sbp_disable_emojis_tinymce( $plugins ) {
519
+ if ( is_array( $plugins ) ) {
520
+ return array_diff( $plugins, array( 'wpemoji' ) );
521
+ } else {
522
+ return array();
523
+ }
524
+ }
525
+
526
+ function sbp_disable_emojis_dns_prefetch( $urls, $relation_type ) {
527
+ if ( 'dns-prefetch' == $relation_type ) {
528
+ $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.1/svg/' );
529
+ $urls = array_diff( $urls, array( $emoji_svg_url ) );
530
+ }
531
+
532
+ return $urls;
533
+ }
534
+
535
+ /*--------------------------------------------------------------------------------------------------------
536
+ Disable XML-RPC
537
+ ---------------------------------------------------------------------------------------------------------*/
538
+
539
+ function sbp_remove_x_pingback( $headers ) {
540
+ unset( $headers['X-Pingback'] );
541
+
542
+ return $headers;
543
+ }
544
+
545
+ /*--------------------------------------------------------------------------------------------------------
546
+ Dequeue extra Font Awesome stylesheet
547
+ ---------------------------------------------------------------------------------------------------------*/
548
+
549
+ function sbp_no_more_fontawesome() {
550
+ global $wp_styles;
551
+ global $sbp_options;
552
+
553
+ // we'll use preg_match to find only the following patterns as exact matches, to prevent other plugin stylesheets that contain font-awesome expression to be also dequeued
554
+ $patterns = array(
555
+ 'font-awesome.css',
556
+ 'font-awesome.min.css',
557
+ );
558
+ // multiple patterns hook
559
+ $regex = '/(' . implode( '|', $patterns ) . ')/i';
560
+ foreach ( $wp_styles->registered as $registered ) {
561
+ if ( ! is_admin() and preg_match( $regex, $registered->src ) and isset( $sbp_options['font_awesome'] ) ) {
562
+ wp_dequeue_style( $registered->handle );
563
+ // FA was dequeued, so here we need to enqueue it again from CDN
564
+ wp_enqueue_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css' );
565
+ } // END if( preg_match...
566
+ } // END foreach
567
+ } // End function dfa_no_more_fontawesome
568
+
569
+
570
+ /*--------------------------------------------------------------------------------------------------------
571
+ Remove junk header tags
572
+ ---------------------------------------------------------------------------------------------------------*/
573
+
574
+ public function sbp_junk_header_tags() {
575
+
576
+ global $sbp_options;
577
+
578
+ // Remove Adjacent Posts links PREV/NEXT
579
+ if ( isset( $sbp_options['remove_adjacent'] ) ) {
580
+ remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' );
581
+ }
582
+
583
+ // Remove Windows Live Writer Manifest Link
584
+ if ( isset( $sbp_options['wml_link'] ) ) {
585
+ remove_action( 'wp_head', 'wlwmanifest_link' );
586
+ }
587
+
588
+ // Remove RSD (Really Simple Discovery) Link
589
+ if ( isset( $sbp_options['rsd_link'] ) ) {
590
+ remove_action( 'wp_head', 'rsd_link' );
591
+ }
592
+
593
+ // Remove WordPress Shortlinks from WP Head
594
+ if ( isset( $sbp_options['remove_wsl'] ) ) {
595
+ remove_action( 'wp_head', 'wp_shortlink_wp_head' );
596
+ }
597
+
598
+ // Remove WP Generator/Version - for security reasons and cleaning the header
599
+ if ( isset( $sbp_options['wp_generator'] ) ) {
600
+ remove_action( 'wp_head', 'wp_generator' );
601
+ }
602
+
603
+ // Remove all feeds
604
+ if ( isset( $sbp_options['remove_all_feeds'] ) ) {
605
+ remove_action( 'wp_head', 'feed_links_extra', 3 ); // remove the feed links from the extra feeds such as category feeds
606
+ remove_action( 'wp_head', 'feed_links', 2 ); // remove the feed links from the general feeds: Post and Comment Feed
607
+ }
608
+
609
+ } // END public function sbp_junk_header_tags
610
+ } // END class Speed_Booster_Pack_Core
611
  } // END if(!class_exists('Speed_Booster_Pack_Core'))
inc/crazy-lazy.class.php CHANGED
@@ -1,172 +1,172 @@
1
- <?php
2
- /**
3
- * CrazyLazy plugin class
4
- *
5
- * @package CrazyLazy
6
- */
7
-
8
- /* Quit */
9
- defined( 'ABSPATH' ) or exit;
10
-
11
-
12
- /**
13
- * Class CrazyLazy
14
- */
15
- final class CrazyLazy {
16
-
17
-
18
- /**
19
- * Class instance
20
- *
21
- * @since 0.0.1
22
- * @change 0.0.1
23
- */
24
- public static function instance() {
25
- new self();
26
- }
27
-
28
-
29
- /**
30
- * Class constructor
31
- *
32
- * @since 0.0.1
33
- * @change 0.0.9
34
- */
35
- public function __construct() {
36
- /* Go home */
37
- if ( is_feed() || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
38
- return;
39
- }
40
-
41
- /* Hooks */
42
- add_filter(
43
- 'the_content',
44
- array(
45
- __CLASS__,
46
- 'prepare_images',
47
- ),
48
- 12 /* Important for galleries */
49
- );
50
- add_filter(
51
- 'post_thumbnail_html',
52
- array(
53
- __CLASS__,
54
- 'prepare_images',
55
- )
56
- );
57
- add_action(
58
- 'wp_enqueue_scripts',
59
- array(
60
- __CLASS__,
61
- 'print_scripts',
62
- )
63
- );
64
- }
65
-
66
-
67
- /**
68
- * Prepare content images for Crazy Lazy usage
69
- *
70
- * @since 0.0.1
71
- * @change 1.0.0
72
- *
73
- * @param string $content The original post content.
74
- *
75
- * @return string The modified post content.
76
- */
77
- public static function prepare_images( $content ) {
78
- /* No lazy images? */
79
- if ( strpos( $content, '-image' ) === false ) {
80
- return $content;
81
- }
82
-
83
- /* Replace images */
84
- return preg_replace_callback(
85
- '/(?P<all> (?# match the whole img tag )
86
- <img(?P<before>[^>]*) (?# the opening of the img and some optional attributes )
87
- ( (?# match a class attribute followed by some optional ones and the src attribute )
88
- class=["\'](?P<class1>.*?(?:wp-image-|wp-post-image)[^>"\']*)["\']
89
- (?P<between1>[^>]*)
90
- src=["\'](?P<src1>[^>"\']*)["\']
91
- | (?# match same as before, but with the src attribute before the class attribute )
92
- src=["\'](?P<src2>[^>"\']*)["\']
93
- (?P<between2>[^>]*)
94
- class=["\'](?P<class2>.*?(?:wp-image-|wp-post-image)[^>"\']*)["\']
95
- )
96
- (?P<after>[^>]*) (?# match any additional optional attributes )
97
- (?P<closing>\/?)> (?# match the closing of the img tag with or without a self closing slash )
98
- )/x',
99
- array( 'CrazyLazy', 'replace_images' ),
100
- $content
101
- );
102
- }
103
-
104
- /**
105
- * The callback function for the preg_match_callback to modify the img tags.
106
- *
107
- * @since 1.0.0
108
- *
109
- * @param array $matches The regex matches.
110
- *
111
- * @return string The modified content string.
112
- */
113
- public static function replace_images( $matches ) {
114
- /* Empty gif */
115
- $null = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
116
- // Return unmodified image if the "data skip" attribute was found or the image has already been processed.
117
- if ( false !== strpos( $matches['all'], 'data-crazy-lazy="exclude"' ) || false !== strpos( $matches['class1'] . $matches['class2'], 'crazy_lazy' ) ) {
118
- return $matches['all'];
119
- } else {
120
- return '<img ' . $matches['before']
121
- . ' style="display:none" '
122
- . ' class="crazy_lazy ' . $matches['class1'] . $matches['class2'] . '" src="' . $null . '" '
123
- . $matches['between1'] . $matches['between2']
124
- . ' data-src="' . $matches['src1'] . $matches['src2'] . '" '
125
- . $matches['after']
126
- . $matches['closing'] . '><noscript>' . $matches['all'] . '</noscript>';
127
- }
128
- }
129
-
130
-
131
- /**
132
- * Print lazy load scripts in footer
133
- *
134
- * @since 0.0.1
135
- * @change 0.0.6
136
- */
137
- public static function print_scripts() {
138
- /* Globals */
139
- global $wp_scripts;
140
-
141
- /* Check for jQuery */
142
- if ( ! empty( $wp_scripts ) && (bool) $wp_scripts->query( 'jquery' ) ) { /* hot fix for buggy wp_script_is() */
143
- self::_print_jquery_lazyload();
144
- } else {
145
- self::_print_javascript_lazyload();
146
- }
147
- }
148
-
149
-
150
- /**
151
- * Call unveil lazy load jQuery plugin
152
- *
153
- * @since 0.0.5
154
- * @change 0.0.9
155
- */
156
- private static function _print_jquery_lazyload() {
157
- // wp_enqueue_script( 'unveil.js', plugins_url( '/js/jquery.unveil.min.js', CRAZY_LAZY_BASE ), array( 'jquery' ), '', true );
158
- wp_enqueue_script( 'unveil.js', plugin_dir_url( __FILE__ ) . 'js/jquery.unveil.min.js', array( 'jquery' ), SPEED_BOOSTER_PACK_VERSION, true );
159
- }
160
-
161
-
162
- /**
163
- * Call pure javascript lazyload.js
164
- *
165
- * @since 0.0.5
166
- * @change 0.0.9
167
- */
168
- private static function _print_javascript_lazyload() {
169
- // wp_enqueue_script( 'lazyload.js', plugins_url( '/js/lazyload.min.js', CRAZY_LAZY_BASE ), array(), '', true );
170
- wp_enqueue_script( 'lazyload.js', plugin_dir_url( __FILE__ ) . 'js/lazyload.min.js', array( 'jquery' ), SPEED_BOOSTER_PACK_VERSION, true );
171
- }
172
- }
1
+ <?php
2
+ /**
3
+ * CrazyLazy plugin class
4
+ *
5
+ * @package CrazyLazy
6
+ */
7
+
8
+ /* Quit */
9
+ defined( 'ABSPATH' ) or exit;
10
+
11
+
12
+ /**
13
+ * Class CrazyLazy
14
+ */
15
+ final class CrazyLazy {
16
+
17
+
18
+ /**
19
+ * Class instance
20
+ *
21
+ * @since 0.0.1
22
+ * @change 0.0.1
23
+ */
24
+ public static function instance() {
25
+ new self();
26
+ }
27
+
28
+
29
+ /**
30
+ * Class constructor
31
+ *
32
+ * @since 0.0.1
33
+ * @change 0.0.9
34
+ */
35
+ public function __construct() {
36
+ /* Go home */
37
+ if ( is_feed() || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
38
+ return;
39
+ }
40
+
41
+ /* Hooks */
42
+ add_filter(
43
+ 'the_content',
44
+ array(
45
+ __CLASS__,
46
+ 'prepare_images',
47
+ ),
48
+ 12 /* Important for galleries */
49
+ );
50
+ add_filter(
51
+ 'post_thumbnail_html',
52
+ array(
53
+ __CLASS__,
54
+ 'prepare_images',
55
+ )
56
+ );
57
+ add_action(
58
+ 'wp_enqueue_scripts',
59
+ array(
60
+ __CLASS__,
61
+ 'print_scripts',
62
+ )
63
+ );
64
+ }
65
+
66
+
67
+ /**
68
+ * Prepare content images for Crazy Lazy usage
69
+ *
70
+ * @since 0.0.1
71
+ * @change 1.0.0
72
+ *
73
+ * @param string $content The original post content.
74
+ *
75
+ * @return string The modified post content.
76
+ */
77
+ public static function prepare_images( $content ) {
78
+ /* No lazy images? */
79
+ if ( strpos( $content, '-image' ) === false ) {
80
+ return $content;
81
+ }
82
+
83
+ /* Replace images */
84
+ return preg_replace_callback(
85
+ '/(?P<all> (?# match the whole img tag )
86
+ <img(?P<before>[^>]*) (?# the opening of the img and some optional attributes )
87
+ ( (?# match a class attribute followed by some optional ones and the src attribute )
88
+ class=["\'](?P<class1>.*?(?:wp-image-|wp-post-image)[^>"\']*)["\']
89
+ (?P<between1>[^>]*)
90
+ src=["\'](?P<src1>[^>"\']*)["\']
91
+ | (?# match same as before, but with the src attribute before the class attribute )
92
+ src=["\'](?P<src2>[^>"\']*)["\']
93
+ (?P<between2>[^>]*)
94
+ class=["\'](?P<class2>.*?(?:wp-image-|wp-post-image)[^>"\']*)["\']
95
+ )
96
+ (?P<after>[^>]*) (?# match any additional optional attributes )
97
+ (?P<closing>\/?)> (?# match the closing of the img tag with or without a self closing slash )
98
+ )/x',
99
+ array( 'CrazyLazy', 'replace_images' ),
100
+ $content
101
+ );
102
+ }
103
+
104
+ /**
105
+ * The callback function for the preg_match_callback to modify the img tags.
106
+ *
107
+ * @since 1.0.0
108
+ *
109
+ * @param array $matches The regex matches.
110
+ *
111
+ * @return string The modified content string.
112
+ */
113
+ public static function replace_images( $matches ) {
114
+ /* Empty gif */
115
+ $null = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
116
+ // Return unmodified image if the "data skip" attribute was found or the image has already been processed.
117
+ if ( false !== strpos( $matches['all'], 'data-crazy-lazy="exclude"' ) || false !== strpos( $matches['class1'] . $matches['class2'], 'crazy_lazy' ) ) {
118
+ return $matches['all'];
119
+ } else {
120
+ return '<img ' . $matches['before']
121
+ . ' style="display:none" '
122
+ . ' class="crazy_lazy ' . $matches['class1'] . $matches['class2'] . '" src="' . $null . '" '
123
+ . $matches['between1'] . $matches['between2']
124
+ . ' data-src="' . $matches['src1'] . $matches['src2'] . '" '
125
+ . $matches['after']
126
+ . $matches['closing'] . '><noscript>' . $matches['all'] . '</noscript>';
127
+ }
128
+ }
129
+
130
+
131
+ /**
132
+ * Print lazy load scripts in footer
133
+ *
134
+ * @since 0.0.1
135
+ * @change 0.0.6
136
+ */
137
+ public static function print_scripts() {
138
+ /* Globals */
139
+ global $wp_scripts;
140
+
141
+ /* Check for jQuery */
142
+ if ( ! empty( $wp_scripts ) && (bool) $wp_scripts->query( 'jquery' ) ) { /* hot fix for buggy wp_script_is() */
143
+ self::_print_jquery_lazyload();
144
+ } else {
145
+ self::_print_javascript_lazyload();
146
+ }
147
+ }
148
+
149
+
150
+ /**
151
+ * Call unveil lazy load jQuery plugin
152
+ *
153
+ * @since 0.0.5
154
+ * @change 0.0.9
155
+ */
156
+ private static function _print_jquery_lazyload() {
157
+ // wp_enqueue_script( 'unveil.js', plugins_url( '/js/jquery.unveil.min.js', CRAZY_LAZY_BASE ), array( 'jquery' ), '', true );
158
+ wp_enqueue_script( 'unveil.js', plugin_dir_url( __FILE__ ) . 'js/jquery.unveil.min.js', array( 'jquery' ), SPEED_BOOSTER_PACK_VERSION, true );
159
+ }
160
+
161
+
162
+ /**
163
+ * Call pure javascript lazyload.js
164
+ *
165
+ * @since 0.0.5
166
+ * @change 0.0.9
167
+ */
168
+ private static function _print_javascript_lazyload() {
169
+ // wp_enqueue_script( 'lazyload.js', plugins_url( '/js/lazyload.min.js', CRAZY_LAZY_BASE ), array(), '', true );
170
+ wp_enqueue_script( 'lazyload.js', plugin_dir_url( __FILE__ ) . 'js/lazyload.min.js', array( 'jquery' ), SPEED_BOOSTER_PACK_VERSION, true );
171
+ }
172
+ }
inc/crazy-lazy.php CHANGED
@@ -1,37 +1,37 @@
1
- <?php
2
-
3
- /*
4
- Copyright (C) 2013-2015 Sergej Müller & https://github.com/pluginkollektiv/crazy-lazy
5
-
6
- This program is free software; you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation; either version 2 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License along
17
- with this program; if not, write to the Free Software Foundation, Inc.,
18
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-
22
- /* Quit */
23
- defined( 'ABSPATH' ) || exit;
24
-
25
-
26
- /* FE only */
27
- if ( is_admin() ) {
28
- return;
29
- }
30
-
31
-
32
- /* Fire! */
33
- define( 'CRAZY_LAZY_BASE', plugin_basename( __FILE__ ) );
34
-
35
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/crazy-lazy.class.php' );
36
-
37
- add_action( 'wp', array( 'CrazyLazy', 'instance' ) );
1
+ <?php
2
+
3
+ /*
4
+ Copyright (C) 2013-2015 Sergej Müller & https://github.com/pluginkollektiv/crazy-lazy
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License along
17
+ with this program; if not, write to the Free Software Foundation, Inc.,
18
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+
22
+ /* Quit */
23
+ defined( 'ABSPATH' ) || exit;
24
+
25
+
26
+ /* FE only */
27
+ if ( is_admin() ) {
28
+ return;
29
+ }
30
+
31
+
32
+ /* Fire! */
33
+ define( 'CRAZY_LAZY_BASE', plugin_basename( __FILE__ ) );
34
+
35
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/crazy-lazy.class.php' );
36
+
37
+ add_action( 'wp', array( 'CrazyLazy', 'instance' ) );
inc/css-optimizer.php CHANGED
@@ -1,204 +1,228 @@
1
- <?php
2
-
3
- /*--------------------------------------------------------------------------------------------------------
4
- CSS OPTIMIZER - Generate Styles List
5
- ---------------------------------------------------------------------------------------------------------*/
6
-
7
- function sbp_generate_styles_list() {
8
-
9
- global $wp_styles;
10
-
11
- $list = array();
12
- if ( isset( $wp_styles->queue ) && is_array( $wp_styles->queue ) ) {
13
- foreach ( $wp_styles->queue as $style ) {
14
- if ( is_css_excluded( $style ) ) {
15
- // load excluded stylesheet in render-blocking manner
16
- } else {
17
- $list[] = array(
18
- 'src' => $wp_styles->registered[$style]->src,
19
- 'media' => $wp_styles->registered[$style]->args
20
- );
21
- }
22
- }
23
- }
24
- return $list;
25
-
26
- } // END function sbp_generate_styles_list
27
-
28
-
29
- /*--------------------------------------------------------------------------------------------------------
30
- CSS OPTIMIZER - Deregister all styles
31
- ---------------------------------------------------------------------------------------------------------*/
32
-
33
- function sbp_unregister_styles() {
34
-
35
- global $wp_styles;
36
-
37
- if ( isset( $wp_styles->queue ) && is_array( $wp_styles->queue ) ) {
38
-
39
- foreach ( $wp_styles->queue as $style ){
40
- if ( is_css_excluded( $style )) {
41
- continue;
42
- }
43
-
44
- wp_dequeue_style( $style );
45
- wp_deregister_style( $style );
46
- }
47
- }
48
-
49
- } // END function sbp_unregister_styles
50
-
51
-
52
- /*--------------------------------------------------------------------------------------------------------
53
- CSS OPTIMIZER - Generate inline styles
54
- ---------------------------------------------------------------------------------------------------------*/
55
-
56
- function sbp_inline_css( $url, $minify = true ) {
57
-
58
- $base_url = get_bloginfo( 'wpurl' );
59
- $path = false;
60
-
61
- if ( strpos( $url, $base_url ) !== FALSE ) {
62
-
63
- $path = str_replace( $base_url,rtrim(ABSPATH,'/'),$url );
64
-
65
- } elseif ( $url[0]=='/' && $url[1]!='/' ) {
66
-
67
- $path = rtrim( ABSPATH,'/' ).$url;
68
- $url = $base_url.$url;
69
- }
70
-
71
- if ( $path && file_exists( $path ) ){
72
-
73
- $css = file_get_contents( $path );
74
-
75
- if ( $minify ){
76
- $css = sbp_minify_css( $css );
77
- }
78
-
79
- $css = sbp_rebuilding_css_urls( $css, $url );
80
-
81
- echo $css;
82
- return true;
83
-
84
- } else {
85
-
86
- return false;
87
- }
88
-
89
- } // END function sbp_inline_css
90
-
91
-
92
- /*--------------------------------------------------------------------------------------------------------
93
- CSS OPTIMIZER - Rebuilding CSS URLs
94
- ---------------------------------------------------------------------------------------------------------*/
95
-
96
- function sbp_rebuilding_css_urls($css,$url){
97
- $css_dir = substr($url,0,strrpos($url,'/'));
98
- $css = preg_replace("/url\((?!data:)['\"]?([^\/][^'\"\)]*)['\"]?\)/i","url({$css_dir}/$1)",$css);
99
-
100
- return $css;
101
- }
102
-
103
-
104
- /*--------------------------------------------------------------------------------------------------------
105
- CSS OPTIMIZER - Minify All CSS
106
- ---------------------------------------------------------------------------------------------------------*/
107
-
108
-
109
- function sbp_minify_css( $css ) {
110
-
111
- $css = sbp_remove_multiline_comments( $css );
112
- $css = str_replace(array("\t","\n","\r"),' ',$css);
113
- $cnt = 1;
114
-
115
- while ($cnt>0) {
116
- $css = str_replace(' ',' ',$css,$cnt);
117
- }
118
-
119
- $css = str_replace(array(' {','{ '),'{',$css);
120
- $css = str_replace(array(' }','} ',';}'),'}',$css);
121
- $css = str_replace(': ',':',$css);
122
- $css = str_replace('; ',';',$css);
123
- $css = str_replace(', ',',',$css);
124
-
125
- return $css;
126
- }
127
-
128
-
129
- /*--------------------------------------------------------------------------------------------------------
130
- CSS OPTIMIZER - Remove multi-line comments from CSS
131
- ---------------------------------------------------------------------------------------------------------*/
132
-
133
- function sbp_remove_multiline_comments( $code,$method=0 ) {
134
-
135
- switch ( $method ) {
136
- case 1:{
137
-
138
- $code = preg_replace( '/\s*(?!<\")\/\*[^\*]+\*\/(?!\")\s*/' , '' , $code );
139
- break;
140
- }
141
-
142
- case 0:
143
-
144
- default :{
145
-
146
- $open_pos = strpos($code,'/*');
147
- while ( $open_pos !== FALSE ){
148
- $close_pos = strpos($code,'*/',$open_pos)+2;
149
- if ($close_pos){
150
- $code = substr($code,0,$open_pos) . substr($code,$close_pos);
151
- } else {
152
- $code = substr($code,0,$open_pos);
153
- }
154
-
155
- $open_pos = strpos($code,'/*',$open_pos);
156
- }
157
-
158
- break;
159
- }
160
- }
161
-
162
- return $code;
163
- }
164
-
165
-
166
- /*--------------------------------------------------------------------------------------------------------
167
- CSS OPTIMIZER - get stylesheets exception list
168
- ---------------------------------------------------------------------------------------------------------*/
169
-
170
- function sbp_style_exceptions() {
171
-
172
- $array = explode("\n",get_option( 'sbp_css_exceptions' ));
173
- $css_exceptions = array();
174
- foreach ($array as $key=>$ex) {
175
- if (trim($ex)!=''){
176
- $css_exceptions[$key] = trim($ex);
177
- }
178
- }
179
-
180
- return $css_exceptions;
181
- }
182
-
183
-
184
- /*--------------------------------------------------------------------------------------------------------
185
- CSS OPTIMIZER - get stylesheets exception names
186
- ---------------------------------------------------------------------------------------------------------*/
187
-
188
- function is_css_excluded( $file ) {
189
- global $wp_styles;
190
- $css_exceptions = sbp_style_exceptions();
191
-
192
- if( is_string( $file ) && isset( $wp_styles->registered[$file] ) ) {
193
- $filename = $file;
194
- $file = $wp_styles->registered[$file];
195
- }
196
-
197
- foreach ( $css_exceptions as $ex ){
198
- if ( $file->handle==$ex || (strpos($ex,'.')!==FALSE && strpos($file->src,$ex)!==FALSE) ){
199
- return true;
200
- }
201
- }
202
-
203
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  }
1
+ <?php
2
+
3
+ /*--------------------------------------------------------------------------------------------------------
4
+ CSS OPTIMIZER - Generate Styles List
5
+ ---------------------------------------------------------------------------------------------------------*/
6
+
7
+ function sbp_generate_styles_list() {
8
+
9
+ global $wp_styles;
10
+
11
+ $list = array();
12
+ if ( isset( $wp_styles->queue ) && is_array( $wp_styles->queue ) ) {
13
+ foreach ( $wp_styles->queue as $style ) {
14
+ if ( is_css_excluded( $style ) ) {
15
+ // load excluded stylesheet in render-blocking manner
16
+ } else {
17
+ $list[] = array(
18
+ 'src' => $wp_styles->registered[ $style ]->src,
19
+ 'media' => $wp_styles->registered[ $style ]->args,
20
+ );
21
+ }
22
+ }
23
+ }
24
+
25
+ return $list;
26
+
27
+ } // END function sbp_generate_styles_list
28
+
29
+
30
+ /*--------------------------------------------------------------------------------------------------------
31
+ CSS OPTIMIZER - Deregister all styles
32
+ ---------------------------------------------------------------------------------------------------------*/
33
+
34
+ function sbp_unregister_styles() {
35
+
36
+ global $wp_styles;
37
+
38
+ if ( isset( $wp_styles->queue ) && is_array( $wp_styles->queue ) ) {
39
+
40
+ foreach ( $wp_styles->queue as $style ) {
41
+ if ( is_css_excluded( $style ) ) {
42
+ continue;
43
+ }
44
+
45
+ wp_dequeue_style( $style );
46
+ wp_deregister_style( $style );
47
+ }
48
+ }
49
+
50
+ } // END function sbp_unregister_styles
51
+
52
+
53
+ /*--------------------------------------------------------------------------------------------------------
54
+ CSS OPTIMIZER - Generate inline styles
55
+ ---------------------------------------------------------------------------------------------------------*/
56
+
57
+ function sbp_inline_css( $url, $minify = true ) {
58
+
59
+ $base_url = get_bloginfo( 'wpurl' );
60
+ $path = false;
61
+
62
+ if ( strpos( $url, $base_url ) !== false ) {
63
+
64
+ $path = str_replace( $base_url, rtrim( ABSPATH, '/' ), $url );
65
+
66
+ } elseif ( $url[0] == '/' && $url[1] != '/' ) {
67
+
68
+ $path = rtrim( ABSPATH, '/' ) . $url;
69
+ $url = $base_url . $url;
70
+ }
71
+
72
+ if ( $path && file_exists( $path ) ) {
73
+
74
+ $css = file_get_contents( $path );
75
+
76
+ if ( $minify ) {
77
+ $css = sbp_minify_css( $css );
78
+ }
79
+
80
+ $css = sbp_rebuilding_css_urls( $css, $url );
81
+
82
+ echo $css;
83
+
84
+ return true;
85
+
86
+ } else {
87
+
88
+ return false;
89
+ }
90
+
91
+ } // END function sbp_inline_css
92
+
93
+
94
+ /*--------------------------------------------------------------------------------------------------------
95
+ CSS OPTIMIZER - Rebuilding CSS URLs
96
+ ---------------------------------------------------------------------------------------------------------*/
97
+
98
+ function sbp_rebuilding_css_urls( $css, $url ) {
99
+ $css_dir = substr( $url, 0, strrpos( $url, '/' ) );
100
+
101
+ // old regex expresison
102
+ //$css = preg_replace( "/url\((?!data:)['\"]?([^\/][^'\"\)]*)['\"]?\)/i", "url({$css_dir}/$1)", $css );
103
+
104
+ // new regex expression
105
+ $css = preg_replace( "/url(?!\(['\"]?(data:|http:))\(['\"]?([^\/][^'\"\)]*)['\"]?\)/i", "url({$css_dir}/$2)", $css );
106
+
107
+
108
+ return $css;
109
+ }
110
+
111
+
112
+ /*--------------------------------------------------------------------------------------------------------
113
+ CSS OPTIMIZER - Minify All CSS
114
+ ---------------------------------------------------------------------------------------------------------*/
115
+
116
+
117
+ function sbp_minify_css( $css ) {
118
+
119
+ $css = sbp_remove_multiline_comments( $css );
120
+ $css = str_replace( array( "\t", "\n", "\r" ), ' ', $css );
121
+ $cnt = 1;
122
+
123
+ while ( $cnt > 0 ) {
124
+ $css = str_replace( ' ', ' ', $css, $cnt );
125
+ }
126
+
127
+ $css = str_replace( array( ' {', '{ ' ), '{', $css );
128
+ $css = str_replace( array( ' }', '} ', ';}' ), '}', $css );
129
+ $css = str_replace( ': ', ':', $css );
130
+ $css = str_replace( '; ', ';', $css );
131
+ $css = str_replace( ', ', ',', $css );
132
+
133
+ return $css;
134
+ }
135
+
136
+
137
+ /*--------------------------------------------------------------------------------------------------------
138
+ CSS OPTIMIZER - Remove multi-line comments from CSS
139
+ ---------------------------------------------------------------------------------------------------------*/
140
+
141
+ function sbp_remove_multiline_comments( $code, $method = 0 ) {
142
+
143
+ switch ( $method ) {
144
+ case 1:
145
+ {
146
+
147
+ $code = preg_replace( '/\s*(?!<\")\/\*[^\*]+\*\/(?!\")\s*/', '', $code );
148
+ break;
149
+ }
150
+
151
+ case 0:
152
+
153
+ default :
154
+ {
155
+
156
+ $open_pos = strpos( $code, '/*' );
157
+ while ( $open_pos !== false ) {
158
+ $close_pos = strpos( $code, '*/', $open_pos ) + 2;
159
+ if ( $close_pos ) {
160
+ $code = substr( $code, 0, $open_pos ) . substr( $code, $close_pos );
161
+ } else {
162
+ $code = substr( $code, 0, $open_pos );
163
+ }
164
+
165
+ $open_pos = strpos( $code, '/*', $open_pos );
166
+ }
167
+
168
+ break;
169
+ }
170
+ }
171
+
172
+ return $code;
173
+ }
174
+
175
+
176
+ /*--------------------------------------------------------------------------------------------------------
177
+ CSS OPTIMIZER - get stylesheets exception list
178
+ ---------------------------------------------------------------------------------------------------------*/
179
+
180
+ function sbp_style_exceptions() {
181
+
182
+ /**
183
+ * Never include these CSS handles/files
184
+ *
185
+ * @since 3.7
186
+ */
187
+ $default = array(
188
+ 'admin-bar',
189
+ 'dashicons',
190
+ );
191
+
192
+ $array = explode( "\n", get_option( 'sbp_css_exceptions' ) );
193
+ $css_exceptions = array();
194
+ foreach ( $array as $key => $ex ) {
195
+ if ( trim( $ex ) != '' ) {
196
+ $css_exceptions[ $key ] = trim( $ex );
197
+
198
+ }
199
+ }
200
+
201
+ // merge defaults with our actual exceptions
202
+ $css_exceptions = array_merge( $css_exceptions, $default );
203
+
204
+ return (array) $css_exceptions;
205
+ }
206
+
207
+
208
+ /*--------------------------------------------------------------------------------------------------------
209
+ CSS OPTIMIZER - get stylesheets exception names
210
+ ---------------------------------------------------------------------------------------------------------*/
211
+
212
+ function is_css_excluded( $file ) {
213
+ global $wp_styles;
214
+ $css_exceptions = sbp_style_exceptions();
215
+
216
+ if ( is_string( $file ) && isset( $wp_styles->registered[ $file ] ) ) {
217
+ $filename = $file;
218
+ $file = $wp_styles->registered[ $file ];
219
+ }
220
+
221
+ foreach ( $css_exceptions as $ex ) {
222
+ if ( $file->handle == $ex || ( strpos( $ex, '.' ) !== false && strpos( $file->src, $ex ) !== false ) ) {
223
+ return true;
224
+ }
225
+ }
226
+
227
+ return false;
228
  }
inc/images/icon-128x128.jpg ADDED
Binary file
inc/images/icon-16x16.png ADDED
Binary file
inc/images/sp.png DELETED
Binary file
inc/js/admin-scripts.js ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * The contents of this script only gets loaded on the plugin page
3
+ */
4
+ (function( $ ) {
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Function used to handle admin UI postboxes
10
+ */
11
+ function admin_postboxes() {
12
+
13
+ postboxes.add_postbox_toggles( pagenow );
14
+
15
+ // set cursor to pointer
16
+ $( '.postbox .hndle' ).css( 'cursor', 'pointer' );
17
+ }
18
+
19
+ /**
20
+ * Function used for the image compression slider under "Image Optimization"
21
+ */
22
+ function admin_jquery_sliders() {
23
+
24
+ var slider_selector = ".sbp-slider";
25
+ var slider_amount = ".sbp-amount";
26
+ var slider_integer = "#sbp_integer";
27
+
28
+ if ( $( slider_selector ).length > 0 ) {
29
+
30
+ $( slider_selector ).slider( {
31
+ value: jpegCompression,
32
+ min: 0,
33
+ max: 100,
34
+ step: 1,
35
+ slide: function( event, ui ) {
36
+ jQuery( slider_amount ).val( ui.value );
37
+ jQuery( slider_integer ).val( ui.value );
38
+ }
39
+ } );
40
+
41
+ $( slider_amount ).val( $( slider_selector ).slider( "value" ) );
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Handle UI tab switching via jQuery instead of relying on CSS only
47
+ */
48
+ function admin_tab_switching() {
49
+
50
+ var nav_tab_selector = '.nav-tab-wrapper a';
51
+
52
+ /**
53
+ * Default tab handling
54
+ */
55
+
56
+ // make the first tab active by default
57
+ $( nav_tab_selector + ':first' ).addClass( 'nav-tab-active' );
58
+
59
+ // get the first tab href
60
+ var initial_tab_href = $( nav_tab_selector + ':first' ).attr( 'href' );
61
+
62
+ // make all the tabs, except the first one hidden
63
+ $( '.sb-pack-tab' ).each( function( index, value ) {
64
+ if ( '#' + $( this ).attr( 'id' ) !== initial_tab_href ) {
65
+ $( this ).hide();
66
+ }
67
+ } );
68
+
69
+ /**
70
+ * Listen for click events on nav-tab links
71
+ */
72
+ $( nav_tab_selector ).click( function( event ) {
73
+
74
+ $( nav_tab_selector ).removeClass( 'nav-tab-active' ); // remove class from previous selector
75
+ $( this ).addClass( 'nav-tab-active' ).blur(); // add class to currently clicked selector
76
+
77
+ var clicked_tab = $( this ).attr( 'href' );
78
+
79
+ $( '.sb-pack-tab' ).each( function( index, value ) {
80
+ if ( '#' + $( this ).attr( 'id' ) !== clicked_tab ) {
81
+ $( this ).hide();
82
+ }
83
+
84
+ $( clicked_tab ).fadeIn();
85
+
86
+ } );
87
+
88
+ // prevent default behavior
89
+ event.preventDefault();
90
+
91
+ } );
92
+ }
93
+
94
+ $( document ).ready( function() {
95
+ admin_postboxes();
96
+ admin_jquery_sliders();
97
+ admin_tab_switching();
98
+ } );
99
+
100
+ })( jQuery );
inc/js/jquery.unveil.js CHANGED
@@ -1,72 +1,72 @@
1
- /**
2
- * jQuery Unveil
3
- * A very lightweight jQuery plugin to lazy load images
4
- * http://luis-almeida.github.com/unveil
5
- *
6
- * Modified by Sergej Müller
7
- * http://wpcoder.de
8
- *
9
- * Licensed under the MIT license.
10
- */
11
-
12
- ;(function($) {
13
- $.fn.unveil = function() {
14
-
15
- var $w = $(window),
16
- images = this,
17
- loaded,
18
- inview,
19
- source;
20
-
21
- this.one(
22
- 'unveil',
23
- function() {
24
- var $$ = $(this),
25
- source = $$.data('src') || $$.attr('data-src');
26
-
27
- if ( source) {
28
- $$
29
- .css('opacity', 0)
30
- .attr('src', source)
31
- .animate(
32
- {
33
- 'opacity': 1
34
- },
35
- 200
36
- );
37
- }
38
- }
39
- );
40
-
41
- function unveil() {
42
- inview = images.filter(
43
- function() {
44
- var $e = $(this),
45
- wt = $w.scrollTop(),
46
- wb = wt + $w.height(),
47
- et = $e.offset().top,
48
- eb = et + $e.height();
49
-
50
- return eb >= wt && et <= wb;
51
- }
52
- );
53
-
54
- loaded = inview.trigger('unveil');
55
- images = images.not(loaded);
56
- }
57
-
58
- $w.scroll(unveil);
59
- $w.resize(unveil);
60
-
61
- unveil();
62
-
63
- return this;
64
- };
65
- })(window.jQuery);
66
-
67
-
68
- jQuery(document).ready(
69
- function(){
70
- jQuery("img.crazy_lazy").css('display', '').unveil();
71
- }
72
  );
1
+ /**
2
+ * jQuery Unveil
3
+ * A very lightweight jQuery plugin to lazy load images
4
+ * http://luis-almeida.github.com/unveil
5
+ *
6
+ * Modified by Sergej Müller
7
+ * http://wpcoder.de
8
+ *
9
+ * Licensed under the MIT license.
10
+ */
11
+
12
+ ;(function($) {
13
+ $.fn.unveil = function() {
14
+
15
+ var $w = $(window),
16
+ images = this,
17
+ loaded,
18
+ inview,
19
+ source;
20
+
21
+ this.one(
22
+ 'unveil',
23
+ function() {
24
+ var $$ = $(this),
25
+ source = $$.data('src') || $$.attr('data-src');
26
+
27
+ if ( source) {
28
+ $$
29
+ .css('opacity', 0)
30
+ .attr('src', source)
31
+ .animate(
32
+ {
33
+ 'opacity': 1
34
+ },
35
+ 200
36
+ );
37
+ }
38
+ }
39
+ );
40
+
41
+ function unveil() {
42
+ inview = images.filter(
43
+ function() {
44
+ var $e = $(this),
45
+ wt = $w.scrollTop(),
46
+ wb = wt + $w.height(),
47
+ et = $e.offset().top,
48
+ eb = et + $e.height();
49
+
50
+ return eb >= wt && et <= wb;
51
+ }
52
+ );
53
+
54
+ loaded = inview.trigger('unveil');
55
+ images = images.not(loaded);
56
+ }
57
+
58
+ $w.scroll(unveil);
59
+ $w.resize(unveil);
60
+
61
+ unveil();
62
+
63
+ return this;
64
+ };
65
+ })(window.jQuery);
66
+
67
+
68
+ jQuery(document).ready(
69
+ function(){
70
+ jQuery("img.crazy_lazy").css('display', '').unveil();
71
+ }
72
  );
inc/js/jquery.unveil.min.js CHANGED
@@ -1,12 +1,12 @@
1
- /**
2
- * jQuery Unveil
3
- * A very lightweight jQuery plugin to lazy load images
4
- * http://luis-almeida.github.com/unveil
5
- *
6
- * Modified by Sergej Müller
7
- * http://wpcoder.de
8
- *
9
- * Licensed under the MIT license.
10
- */
11
-
12
  (function(c){c.fn.unveil=function(){function b(){e=a.filter(function(){var f=c(this),g=d.scrollTop(),b=g+d.height(),a=f.offset().top;return a+f.height()>=g&&a<=b});h=e.trigger("unveil");a=a.not(h)}var d=c(window),a=this,h,e;this.one("unveil",function(){var a=c(this),b=a.data("src")||a.attr("data-src");b&&a.css("opacity",0).attr("src",b).animate({opacity:1},200)});d.scroll(b);d.resize(b);b();return this}})(window.jQuery);jQuery(document).ready(function(){jQuery("img.crazy_lazy").css("display","").unveil()});
1
+ /**
2
+ * jQuery Unveil
3
+ * A very lightweight jQuery plugin to lazy load images
4
+ * http://luis-almeida.github.com/unveil
5
+ *
6
+ * Modified by Sergej Müller
7
+ * http://wpcoder.de
8
+ *
9
+ * Licensed under the MIT license.
10
+ */
11
+
12
  (function(c){c.fn.unveil=function(){function b(){e=a.filter(function(){var f=c(this),g=d.scrollTop(),b=g+d.height(),a=f.offset().top;return a+f.height()>=g&&a<=b});h=e.trigger("unveil");a=a.not(h)}var d=c(window),a=this,h,e;this.one("unveil",function(){var a=c(this),b=a.data("src")||a.attr("data-src");b&&a.css("opacity",0).attr("src",b).animate({opacity:1},200)});d.scroll(b);d.resize(b);b();return this}})(window.jQuery);jQuery(document).ready(function(){jQuery("img.crazy_lazy").css("display","").unveil()});
inc/js/lazyload.js CHANGED
@@ -1,91 +1,91 @@
1
- /* lazyload.js (c) Lorenzo Giuliani
2
- * MIT License (http://www.opensource.org/licenses/mit-license.html)
3
- *
4
- * Modified by Sergej Müller | http://wpcoder.de
5
- */
6
-
7
-
8
- window.onload = function() {
9
- var $q = function(q, res){
10
- if (document.querySelectorAll) {
11
- res = document.querySelectorAll(q);
12
- } else {
13
- var d=document,
14
- a=d.styleSheets[0] || d.createStyleSheet();
15
-
16
- a.addRule(q,'f:b');
17
- for(var l=d.all,b=0,c=[],f=l.length;b<f;b++)
18
- l[b].currentStyle.f && c.push(l[b]);
19
-
20
- a.removeRule(0);
21
- res = c;
22
- }
23
-
24
- return res;
25
- },
26
-
27
- addEventListener = function(evt, fn) {
28
- window.addEventListener
29
- ? this.addEventListener(evt, fn, false)
30
- : (window.attachEvent)
31
- ? this.attachEvent('on' + evt, fn)
32
- : this['on' + evt] = fn;
33
- },
34
-
35
- _has = function(obj, key) {
36
- return Object.prototype.hasOwnProperty.call(obj, key);
37
- };
38
-
39
- function loadImage (el, fn) {
40
- var img = new Image(),
41
- src = el.getAttribute('data-src');
42
-
43
- img.onload = function() {
44
- if ( !! el.parent )
45
- el.parent.replaceChild(img, el)
46
- else
47
- el.src = src;
48
-
49
- if ( fn ) fn();
50
- }
51
-
52
- img.src = src;
53
- }
54
-
55
- function elementInViewport(el) {
56
- var rect = el.getBoundingClientRect();
57
-
58
- return (
59
- rect.top >= 0
60
- && rect.left >= 0
61
- && rect.top <= (window.innerHeight || document.documentElement.clientHeight)
62
- );
63
- }
64
-
65
- var images = new Array(),
66
- query = $q('img.crazy_lazy'),
67
- processScroll = function() {
68
- for (var i = 0; i < images.length; i++) {
69
- if (elementInViewport(images[i])) {
70
- loadImage(
71
- images[i],
72
- function () {
73
- images.splice(i, i);
74
- }
75
- );
76
- }
77
- }
78
- };
79
-
80
- for (var i = 0; i < query.length; i++) {
81
- query[i].removeAttribute('style');
82
- images.push(query[i]);
83
- };
84
-
85
- processScroll();
86
-
87
- addEventListener(
88
- 'scroll',
89
- processScroll
90
- );
91
  };
1
+ /* lazyload.js (c) Lorenzo Giuliani
2
+ * MIT License (http://www.opensource.org/licenses/mit-license.html)
3
+ *
4
+ * Modified by Sergej Müller | http://wpcoder.de
5
+ */
6
+
7
+
8
+ window.onload = function() {
9
+ var $q = function(q, res){
10
+ if (document.querySelectorAll) {
11
+ res = document.querySelectorAll(q);
12
+ } else {
13
+ var d=document,
14
+ a=d.styleSheets[0] || d.createStyleSheet();
15
+
16
+ a.addRule(q,'f:b');
17
+ for(var l=d.all,b=0,c=[],f=l.length;b<f;b++)
18
+ l[b].currentStyle.f && c.push(l[b]);
19
+
20
+ a.removeRule(0);
21
+ res = c;
22
+ }
23
+
24
+ return res;
25
+ },
26
+
27
+ addEventListener = function(evt, fn) {
28
+ window.addEventListener
29
+ ? this.addEventListener(evt, fn, false)
30
+ : (window.attachEvent)
31
+ ? this.attachEvent('on' + evt, fn)
32
+ : this['on' + evt] = fn;
33
+ },
34
+
35
+ _has = function(obj, key) {
36
+ return Object.prototype.hasOwnProperty.call(obj, key);
37
+ };
38
+
39
+ function loadImage (el, fn) {
40
+ var img = new Image(),
41
+ src = el.getAttribute('data-src');
42
+
43
+ img.onload = function() {
44
+ if ( !! el.parent )
45
+ el.parent.replaceChild(img, el)
46
+ else
47
+ el.src = src;
48
+
49
+ if ( fn ) fn();
50
+ }
51
+
52
+ img.src = src;
53
+ }
54
+
55
+ function elementInViewport(el) {
56
+ var rect = el.getBoundingClientRect();
57
+
58
+ return (
59
+ rect.top >= 0
60
+ && rect.left >= 0
61
+ && rect.top <= (window.innerHeight || document.documentElement.clientHeight)
62
+ );
63
+ }
64
+
65
+ var images = new Array(),
66
+ query = $q('img.crazy_lazy'),
67
+ processScroll = function() {
68
+ for (var i = 0; i < images.length; i++) {
69
+ if (elementInViewport(images[i])) {
70
+ loadImage(
71
+ images[i],
72
+ function () {
73
+ images.splice(i, i);
74
+ }
75
+ );
76
+ }
77
+ }
78
+ };
79
+
80
+ for (var i = 0; i < query.length; i++) {
81
+ query[i].removeAttribute('style');
82
+ images.push(query[i]);
83
+ };
84
+
85
+ processScroll();
86
+
87
+ addEventListener(
88
+ 'scroll',
89
+ processScroll
90
+ );
91
  };
inc/js/lazyload.min.js CHANGED
@@ -1,8 +1,8 @@
1
- /* lazyload.js (c) Lorenzo Giuliani
2
- * MIT License (http://www.opensource.org/licenses/mit-license.html)
3
- *
4
- * Modified by Sergej Müller | http://wpcoder.de
5
- */
6
-
7
- window.onload=function(){function h(a,e){var c=new Image,b=a.getAttribute("data-src");c.onload=function(){a.parent?a.parent.replaceChild(c,a):a.src=b;e&&e()};c.src=b}function k(a){a=a.getBoundingClientRect();return 0<=a.top&&0<=a.left&&a.top<=(window.innerHeight||document.documentElement.clientHeight)}for(var b=[],f=function(a,e){if(document.querySelectorAll)e=document.querySelectorAll(a);else{var c=document,b=c.styleSheets[0]||c.createStyleSheet();b.addRule(a,"f:b");for(var c=c.all,d=0,f=[],g=c.length;d<
8
  g;d++)c[d].currentStyle.f&&f.push(c[d]);b.removeRule(0);e=f}return e}("img.crazy_lazy"),g=function(){for(var a=0;a<b.length;a++)k(b[a])&&h(b[a],function(){b.splice(a,a)})},d=0;d<f.length;d++)f[d].removeAttribute("style"),b.push(f[d]);g();(function(a,b){window.addEventListener?this.addEventListener(a,b,!1):window.attachEvent?this.attachEvent("on"+a,b):this["on"+a]=b})("scroll",g)};
1
+ /* lazyload.js (c) Lorenzo Giuliani
2
+ * MIT License (http://www.opensource.org/licenses/mit-license.html)
3
+ *
4
+ * Modified by Sergej Müller | http://wpcoder.de
5
+ */
6
+
7
+ window.onload=function(){function h(a,e){var c=new Image,b=a.getAttribute("data-src");c.onload=function(){a.parent?a.parent.replaceChild(c,a):a.src=b;e&&e()};c.src=b}function k(a){a=a.getBoundingClientRect();return 0<=a.top&&0<=a.left&&a.top<=(window.innerHeight||document.documentElement.clientHeight)}for(var b=[],f=function(a,e){if(document.querySelectorAll)e=document.querySelectorAll(a);else{var c=document,b=c.styleSheets[0]||c.createStyleSheet();b.addRule(a,"f:b");for(var c=c.all,d=0,f=[],g=c.length;d<
8
  g;d++)c[d].currentStyle.f&&f.push(c[d]);b.removeRule(0);e=f}return e}("img.crazy_lazy"),g=function(){for(var a=0;a<b.length;a++)k(b[a])&&h(b[a],function(){b.splice(a,a)})},d=0;d<f.length;d++)f[d].removeAttribute("style"),b.push(f[d]);g();(function(a,b){window.addEventListener?this.addEventListener(a,b,!1):window.attachEvent?this.attachEvent("on"+a,b):this["on"+a]=b})("scroll",g)};
inc/js/plugin-install.js ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function( wp, $ ) {
2
+ 'use strict';
3
+
4
+ if ( ! wp ) {
5
+ return;
6
+ }
7
+
8
+ function activatePlugin( url, el ) {
9
+ var message = el.data( 'message' );
10
+
11
+ $.ajax( {
12
+ async: true,
13
+ type: 'GET',
14
+ dataType: 'html',
15
+ url: url,
16
+ success: function() {
17
+ el.removeClass( 'sbp-updating' );
18
+ el.text( message );
19
+ }
20
+ } );
21
+ }
22
+
23
+ $( function() {
24
+ $( document ).on( 'click', '.sbp-plugin-button', function( event ) {
25
+ var action = $( this ).data( 'action' ),
26
+ url = $( this ).attr( 'href' ),
27
+ slug = $( this ).data( 'slug' );
28
+
29
+ event.preventDefault();
30
+
31
+ if ( 'install' === action ) {
32
+
33
+ $( this ).addClass( 'sbp-updating disbpled' );
34
+
35
+ wp.updates.installPlugin( {
36
+ slug: slug
37
+ } );
38
+
39
+ } else if ( 'activate' === action ) {
40
+
41
+ $( this ).addClass( 'sbp-updating disbpled' );
42
+ activatePlugin( url, $( this ) );
43
+
44
+ }
45
+
46
+ } );
47
+
48
+ $( document ).on( 'wp-plugin-install-success', function( response, data ) {
49
+ var el = $( '.sbp-plugin-button[data-slug="' + data.slug + '"]' );
50
+ event.preventDefault();
51
+ activatePlugin( data.activateUrl, el );
52
+ } );
53
+
54
+ } );
55
+ })( window.wp, jQuery );
inc/js/post-tabs-edit.js DELETED
@@ -1,9 +0,0 @@
1
- jQuery(document).on('ready', function($){
2
- postboxes.save_state = function(){
3
- return;
4
- };
5
- postboxes.save_order = function(){
6
- return;
7
- };
8
- postboxes.add_postbox_toggles();
9
- });
 
 
 
 
 
 
 
 
 
inc/js/sbp-hide.js DELETED
@@ -1,16 +0,0 @@
1
- if (typeof (jQuery) != 'undefined') {
2
- jQuery(document).ready(function () {
3
- validate();
4
- jQuery('input').change(function () {
5
- validate();
6
- })
7
- });
8
-
9
- function validate() {
10
- if (jQuery('input[id=sbp_css_async]').is(':checked')) {
11
- jQuery('#sbp-css-content').show();
12
- } else {
13
- jQuery('#sbp-css-content').hide();
14
- }
15
- }
16
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/js/sbp-slide.js DELETED
@@ -1,13 +0,0 @@
1
- jQuery(document).ready(function () {
2
- jQuery(".sbp-slider").slider({
3
- value: jpegCompression,
4
- min: 0,
5
- max: 100,
6
- step: 1,
7
- slide: function (event, ui) {
8
- jQuery(".sbp-amount").val(ui.value);
9
- jQuery("#sbp_integer").val(ui.value);
10
- }
11
- });
12
- jQuery(".sbp-amount").val(jQuery(".sbp-slider").slider("value"));
13
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/sbp-minifier.php CHANGED
@@ -1,120 +1,121 @@
1
- <?php
2
-
3
- /*--------------------------------------------------------------------------------------------------------
4
- MINIFIER - increase your page load speed by minifying JavaScript and HTML
5
- ---------------------------------------------------------------------------------------------------------*/
6
-
7
- class SBP_HTML_Minifier {
8
- // Minify settings
9
- protected $minify_css = true;
10
- protected $minify_js = true;
11
- protected $info_comment = true;
12
- protected $remove_comments = true;
13
-
14
- // Minify variables
15
- protected $html;
16
- public function __construct($html) {
17
- if (!empty($html)) {
18
- $this->parseHTML($html);
19
- }
20
- }
21
-
22
- public function __toString() {
23
- return $this->html;
24
- }
25
-
26
- protected function bottomComment($raw, $minified) {
27
- $raw = strlen($raw);
28
- $minified = strlen($minified);
29
- $savings = ($raw-$minified) / $raw * 100;
30
- $savings = round($savings, 2);
31
- return '<!--HTML minified, size saved '.$savings.'%. From '.$raw.' bytes, now '.$minified.' bytes-->';
32
- }
33
-
34
- protected function minifyHTML($html) {
35
- $pattern = '/<(?<script>script).*?<\/script\s*>|<(?<style>style).*?<\/style\s*>|<!(?<comment>--).*?-->|<(?<tag>[\/\w.:-]*)(?:".*?"|\'.*?\'|[^\'">]+)*>|(?<text>((<[^!\/\w.:-])?[^<]*)+)|/si';
36
- preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);
37
- $overriding = false;
38
- $raw_tag = false;
39
- // Variable reused for output
40
- $html = '';
41
- foreach ($matches as $token) {
42
- $tag = (isset($token['tag'])) ? strtolower($token['tag']) : null;
43
-
44
- $content = $token[0];
45
-
46
- if (is_null($tag)) {
47
- if ( !empty($token['script']) ) {
48
- $strip = $this->minify_js;
49
- } else if ( !empty($token['style']) ) {
50
- $strip = $this->minify_css;
51
- } else if ($content == '<!--sbp-html-minifier no minifier-->'){
52
- $overriding = !$overriding;
53
-
54
- // Don't print the comments
55
- continue;
56
- } else if ($this->remove_comments){
57
- if (!$overriding && $raw_tag != 'textarea'){
58
- // Remove any HTML comments, except MSIE conditional comments
59
- $content = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $content);
60
- }
61
- }
62
- }else{
63
- if ($tag == 'pre' || $tag == 'textarea'){
64
- $raw_tag = $tag;
65
- }else if ($tag == '/pre' || $tag == '/textarea'){
66
- $raw_tag = false;
67
- }else{
68
- if ($raw_tag || $overriding){
69
- $strip = false;
70
- }else{
71
- $strip = true;
72
- // Remove all empty attributes, except action, alt, content, src
73
- $content = preg_replace('/(\s+)(\w++(?<!\baction|\balt|\bcontent|\bsrc)="")/', '$1', $content);
74
- // Remove all space before the end of self-closing XHTML tags
75
- // JavaScript excluded
76
- $content = str_replace(' />', '/>', $content);
77
- }
78
- }
79
- }
80
-
81
- if ($strip){
82
- $content = $this->removeWhiteSpace($content);
83
- }
84
-
85
- $html .= $content;
86
- }
87
-
88
- return $html;
89
- }
90
-
91
- public function parseHTML($html){
92
- $this->html = $this->minifyHTML($html);
93
-
94
- if ($this->info_comment){
95
- $this->html .= "\n" . $this->bottomComment($html, $this->html);
96
- }
97
- }
98
-
99
- protected function removeWhiteSpace($str){
100
- $str = str_replace("\t", ' ', $str);
101
- $str = str_replace("\n", '', $str);
102
- $str = str_replace("\r", '', $str);
103
-
104
- while (stristr($str, ' ')){
105
- $str = str_replace(' ', ' ', $str);
106
- }
107
-
108
- return $str;
109
- }
110
- }
111
-
112
- function sbp_html_minifier_finish($html){
113
- return new SBP_HTML_Minifier($html);
114
- }
115
-
116
- function sbp_html_minifier_start(){
117
- ob_start('sbp_html_minifier_finish');
118
- }
119
-
 
120
  add_action('get_header', 'sbp_html_minifier_start');
1
+ <?php
2
+
3
+ /*--------------------------------------------------------------------------------------------------------
4
+ MINIFIER - increase your page load speed by minifying JavaScript and HTML
5
+ ---------------------------------------------------------------------------------------------------------*/
6
+
7
+
8
+ class SBP_HTML_Minifier {
9
+ // Minify settings
10
+ protected $minify_css = true;
11
+ protected $minify_js = false;
12
+ protected $info_comment = true;
13
+ protected $remove_comments = true;
14
+
15
+ // Minify variables
16
+ protected $html;
17
+ public function __construct($html) {
18
+ if (!empty($html)) {
19
+ $this->parseHTML($html);
20
+ }
21
+ }
22
+
23
+ public function __toString() {
24
+ return $this->html;
25
+ }
26
+
27
+ protected function bottomComment($raw, $minified) {
28
+ $raw = strlen($raw);
29
+ $minified = strlen($minified);
30
+ $savings = ($raw-$minified) / $raw * 100;
31
+ $savings = round($savings, 2);
32
+ return '<!--HTML minified, size saved '.$savings.'%. From '.$raw.' bytes, now '.$minified.' bytes-->';
33
+ }
34
+
35
+ protected function minifyHTML($html) {
36
+ $pattern = '/<(?<script>script).*?<\/script\s*>|<(?<style>style).*?<\/style\s*>|<!(?<comment>--).*?-->|<(?<tag>[\/\w.:-]*)(?:".*?"|\'.*?\'|[^\'">]+)*>|(?<text>((<[^!\/\w.:-])?[^<]*)+)|/si';
37
+ preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);
38
+ $overriding = false;
39
+ $raw_tag = false;
40
+ // Variable reused for output
41
+ $html = '';
42
+ foreach ($matches as $token) {
43
+ $tag = (isset($token['tag'])) ? strtolower($token['tag']) : null;
44
+
45
+ $content = $token[0];
46
+
47
+ if (is_null($tag)) {
48
+ if ( !empty($token['script']) ) {
49
+ $strip = $this->minify_js;
50
+ } else if ( !empty($token['style']) ) {
51
+ $strip = $this->minify_css;
52
+ } else if ($content == '<!--sbp-html-minifier no minifier-->'){
53
+ $overriding = !$overriding;
54
+
55
+ // Don't print the comments
56
+ continue;
57
+ } else if ($this->remove_comments){
58
+ if (!$overriding && $raw_tag != 'textarea'){
59
+ // Remove any HTML comments, except MSIE conditional comments
60
+ $content = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $content);
61
+ }
62
+ }
63
+ }else{
64
+ if ($tag == 'pre' || $tag == 'textarea'){
65
+ $raw_tag = $tag;
66
+ }else if ($tag == '/pre' || $tag == '/textarea'){
67
+ $raw_tag = false;
68
+ }else{
69
+ if ($raw_tag || $overriding){
70
+ $strip = false;
71
+ }else{
72
+ $strip = true;
73
+ // Remove all empty attributes, except action, alt, content, src
74
+ $content = preg_replace('/(\s+)(\w++(?<!\baction|\balt|\bcontent|\bsrc)="")/', '$1', $content);
75
+ // Remove all space before the end of self-closing XHTML tags
76
+ // JavaScript excluded
77
+ $content = str_replace(' />', '/>', $content);
78
+ }
79
+ }
80
+ }
81
+
82
+ if ($strip){
83
+ $content = $this->removeWhiteSpace($content);
84
+ }
85
+
86
+ $html .= $content;
87
+ }
88
+
89
+ return $html;
90
+ }
91
+
92
+ public function parseHTML($html){
93
+ $this->html = $this->minifyHTML($html);
94
+
95
+ if ($this->info_comment){
96
+ $this->html .= "\n" . $this->bottomComment($html, $this->html);
97
+ }
98
+ }
99
+
100
+ protected function removeWhiteSpace($str){
101
+ $str = str_replace("\t", ' ', $str);
102
+ $str = str_replace("\n", '', $str);
103
+ $str = str_replace("\r", '', $str);
104
+
105
+ while (stristr($str, ' ')){
106
+ $str = str_replace(' ', ' ', $str);
107
+ }
108
+
109
+ return $str;
110
+ }
111
+ }
112
+
113
+ function sbp_html_minifier_finish($html){
114
+ return new SBP_HTML_Minifier($html);
115
+ }
116
+
117
+ function sbp_html_minifier_start(){
118
+ ob_start('sbp_html_minifier_finish');
119
+ }
120
+
121
  add_action('get_header', 'sbp_html_minifier_start');
inc/settings.php CHANGED
@@ -1,324 +1,290 @@
1
- <?php
2
-
3
- if( !class_exists( 'Speed_Booster_Pack_Options' ) ) {
4
-
5
- class Speed_Booster_Pack_Options {
6
-
7
- private $sbp_options;
8
- /*--------------------------------------------------------------------------------------------------------
9
- Construct the plugin object
10
- ---------------------------------------------------------------------------------------------------------*/
11
-
12
- public function __construct() {
13
-
14
- add_action( 'admin_init', array( $this, 'sbp_admin_init' ) );
15
- add_action( 'admin_menu', array( $this, 'sbp_add_menu' ) );
16
- add_action('wp_footer', array( $this, 'sbp_detected_scripts_handle'), 999 );
17
- add_action('wp_footer', array( $this, 'sbp_detected_scripts_src'), 999 );
18
- add_action('wp_footer', array( $this, 'sbp_detected_styles_handle'), 999 );
19
-
20
- } // END public function __construct
21
-
22
-
23
- public function sbp_admin_init() {
24
-
25
- register_setting( 'speed_booster_settings_group', 'sbp_settings' );
26
- register_setting( 'speed_booster_settings_group', 'sbp_integer' );
27
- register_setting( 'speed_booster_settings_group', 'sbp_css_exceptions' );
28
- register_setting( 'speed_booster_settings_group', 'sbp_sanitize');
29
-
30
- register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions1' );
31
- register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions2' );
32
- register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions3' );
33
- register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions4' );
34
-
35
- register_setting( 'speed_booster_settings_group', 'sbp_head_html_script1' );
36
- register_setting( 'speed_booster_settings_group', 'sbp_head_html_script2' );
37
- register_setting( 'speed_booster_settings_group', 'sbp_head_html_script3' );
38
- register_setting( 'speed_booster_settings_group', 'sbp_head_html_script4' );
39
-
40
- register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions1' );
41
- register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions2' );
42
- register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions3' );
43
- register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions4' );
44
-
45
- } // END public function admin_init
46
-
47
-
48
- /*--------------------------------------------------------------------------------------------------------
49
- Get enqueued scripts handles
50
- ---------------------------------------------------------------------------------------------------------*/
51
-
52
- public function sbp_detected_scripts_handle( $handles = array() ) {
53
-
54
- global $wp_scripts;
55
-
56
-
57
- // scripts
58
- foreach ( $wp_scripts -> registered as $registered )
59
- $script_urls[ $registered -> handle ] = $registered -> src;
60
-
61
- // if empty
62
- if ( empty( $handles ) ) {
63
- $handles = array_merge( $wp_scripts -> queue );
64
- array_values( $handles );
65
- }
66
- // output of values
67
- $get_enqueued_scripts_handle = '';
68
- foreach ( $handles as $handle ) {
69
- if ( ! empty( $script_urls[ $handle ] ) )
70
- $get_enqueued_scripts_handle .= $handle . '<br />';
71
-
72
- }
73
-
74
- update_option( 'all_theme_scripts_handle', $get_enqueued_scripts_handle );
75
-
76
- }
77
-
78
- /*--------------------------------------------------------------------------------------------------------
79
- Get enqueued scripts src path
80
- ---------------------------------------------------------------------------------------------------------*/
81
-
82
- public function sbp_detected_scripts_src( $handles = array() ) {
83
-
84
- global $wp_scripts;
85
-
86
- // scripts
87
- foreach ( $wp_scripts -> registered as $registered )
88
- $script_urls[ $registered -> handle ] = $registered -> src;
89
-
90
- // if empty
91
- if ( empty( $handles ) ) {
92
- $handles = array_merge( $wp_scripts -> queue );
93
- array_values( $handles );
94
- }
95
- // output of values
96
- $get_enqueued_scripts_src = '';
97
- foreach ( $handles as $handle ) {
98
- if ( ! empty( $script_urls[ $handle ] ) )
99
- $get_enqueued_scripts_src .= $script_urls[ $handle ] . '<br />';
100
-
101
- }
102
-
103
- update_option( 'all_theme_scripts_src', $get_enqueued_scripts_src );
104
-
105
- }
106
-
107
-
108
- /*--------------------------------------------------------------------------------------------------------
109
- Get enqueued style handles
110
- ---------------------------------------------------------------------------------------------------------*/
111
-
112
- public function sbp_detected_styles_handle( $handles = array() ) {
113
-
114
- global $wp_styles;
115
-
116
-
117
- // scripts
118
- foreach ( $wp_styles -> registered as $registered )
119
- $style_urls[ $registered -> handle ] = $registered -> src;
120
-
121
- // if empty
122
- if ( empty( $handles ) ) {
123
- $handles = array_merge( $wp_styles -> queue );
124
- array_values( $handles );
125
- }
126
- // output of values
127
- $get_enqueued_styles_handle = '';
128
- foreach ( $handles as $handle ) {
129
- if ( ! empty( $style_urls[ $handle ] ) )
130
- $get_enqueued_styles_handle .= $handle . '<br />';
131
-
132
- }
133
-
134
- update_option( 'all_theme_styles_handle', $get_enqueued_styles_handle );
135
-
136
- }
137
-
138
-
139
- /*--------------------------------------------------------------------------------------------------------
140
- Sanitize Options
141
- ---------------------------------------------------------------------------------------------------------*/
142
-
143
- public function sbp_sanitize( $input ) {
144
-
145
- $output = array();
146
-
147
- foreach( $input as $key => $tigu ) {
148
-
149
- switch( $key ) {
150
- case 'sbp_js_footer_exceptions1':
151
- $output[$key] = wp_filter_post_kses( $tigu );
152
- break;
153
- case 'sbp_js_footer_exceptions2':
154
- $output[$key] = wp_filter_post_kses( $tigu );
155
- break;
156
- case 'sbp_js_footer_exceptions3':
157
- $output[$key] = wp_filter_post_kses( $tigu );
158
- break;
159
- case 'sbp_js_footer_exceptions4':
160
- $output[$key] = wp_filter_post_kses( $tigu );
161
- break;
162
- case 'sbp_head_html_script1':
163
- $output[$key] = wp_filter_post_kses( $tigu );
164
- break;
165
- case 'sbp_head_html_script2':
166
- $output[$key] = wp_kses_stripslashes( $tigu );
167
- break;
168
- case 'sbp_head_html_script3':
169
- $output[$key] = wp_kses_stripslashes( $tigu );
170
- break;
171
- case 'sbp_head_html_script4':
172
- $output[$key] = wp_kses_stripslashes( $tigu );
173
- break;
174
-
175
- }
176
-
177
- }
178
-
179
- return $output;
180
- }
181
-
182
-
183
- /*--------------------------------------------------------------------------------------------------------
184
- // Add a page to manage the plugin's settings
185
- ---------------------------------------------------------------------------------------------------------*/
186
-
187
- public function sbp_add_menu() {
188
-
189
- global $sbp_settings_page;
190
- $sbp_settings_page = add_options_page( 'Speed Booster Options', 'Speed Booster Pack', 'manage_options', 'sbp-options', array( $this, 'sbp_plugin_settings_page' ) );
191
-
192
- } // END public function add_menu()
193
-
194
-
195
- public function sbp_plugin_settings_page() {
196
-
197
- if( !current_user_can( 'manage_options' ) ) {
198
- wp_die(__( 'You do not have sufficient permissions to access this page.' ));
199
- }
200
-
201
-
202
- /*--------------------------------------------------------------------------------------------------------
203
- Global Variables used on options HTML page
204
- ---------------------------------------------------------------------------------------------------------*/
205
-
206
- global $sbp_options;
207
-
208
- // Global variables used in plugin options page
209
- $url = get_site_url();
210
- $response = wp_remote_get( $url, array() );
211
- $page_time = get_option( 'sbp_page_time' );
212
- $page_queries = get_option( 'sbp_page_queries' );
213
- $get_enqueued_scripts_handle = get_option( 'all_theme_scripts_handle' );
214
- $get_enqueued_scripts_src = get_option( 'all_theme_scripts_src' );
215
- $get_enqueued_styles_handle = get_option( 'all_theme_styles_handle' );
216
-
217
- // fallback for image compression integer
218
- if ( get_option( 'sbp_integer' ) ) {
219
- $this->image_compression = get_option( 'sbp_integer' );
220
- } else {
221
- $this->image_compression = 90;
222
- }
223
- $this->plugin_url = plugin_dir_url(dirname(__FILE__));
224
-
225
- // fallback for stylesheets exception handle
226
- if ( get_option( 'sbp_css_exceptions' ) ) {
227
- $css_exceptions = get_option( 'sbp_css_exceptions' );
228
- } else {
229
- $css_exceptions = '' ;
230
- }
231
-
232
- /*--------------------------------------------------------------------------------------------------------*/
233
-
234
- if ( get_option( 'sbp_js_footer_exceptions1' ) ) {
235
- $js_footer_exceptions1 = get_option( 'sbp_js_footer_exceptions1' );
236
- } else {
237
- $js_footer_exceptions1 = '' ;
238
- }
239
-
240
- if ( get_option( 'sbp_js_footer_exceptions2' ) ) {
241
- $js_footer_exceptions2 = get_option( 'sbp_js_footer_exceptions2' );
242
- } else {
243
- $js_footer_exceptions2 = '' ;
244
- }
245
-
246
- if ( get_option( 'sbp_js_footer_exceptions3' ) ) {
247
- $js_footer_exceptions3 = get_option( 'sbp_js_footer_exceptions3' );
248
- } else {
249
- $js_footer_exceptions3 = '' ;
250
- }
251
-
252
- if ( get_option( 'sbp_js_footer_exceptions4' ) ) {
253
- $js_footer_exceptions4 = get_option( 'sbp_js_footer_exceptions4' );
254
- } else {
255
- $js_footer_exceptions4 = '' ;
256
- }
257
-
258
- /*--------------------------------------------------------------------------------------------------------*/
259
-
260
- if ( get_option( 'sbp_head_html_script1' ) ) {
261
- $sbp_html_script1 = get_option( 'sbp_head_html_script1' );
262
- } else {
263
- $sbp_html_script1 = '' ;
264
- }
265
-
266
- if ( get_option( 'sbp_head_html_script2' ) ) {
267
- $sbp_html_script2 = get_option( 'sbp_head_html_script2' );
268
- } else {
269
- $sbp_html_script2 = '' ;
270
- }
271
-
272
- if ( get_option( 'sbp_head_html_script3' ) ) {
273
- $sbp_html_script3 = get_option( 'sbp_head_html_script3' );
274
- } else {
275
- $sbp_html_script3 = '' ;
276
- }
277
-
278
- if ( get_option( 'sbp_head_html_script4' ) ) {
279
- $sbp_html_script4 = get_option( 'sbp_head_html_script4' );
280
- } else {
281
- $sbp_html_script4 = '' ;
282
- }
283
-
284
- /*--------------------------------------------------------------------------------------------------------*/
285
-
286
- if ( get_option( 'sbp_defer_exceptions1' ) ) {
287
- $defer_exceptions1 = get_option( 'sbp_defer_exceptions1' );
288
- } else {
289
- $defer_exceptions1 = '' ;
290
- }
291
-
292
- if ( get_option( 'sbp_defer_exceptions2' ) ) {
293
- $defer_exceptions2 = get_option( 'sbp_defer_exceptions2' );
294
- } else {
295
- $defer_exceptions2 = '' ;
296
- }
297
-
298
- if ( get_option( 'sbp_defer_exceptions3' ) ) {
299
- $defer_exceptions3 = get_option( 'sbp_defer_exceptions3' );
300
- } else {
301
- $defer_exceptions3 = '' ;
302
- }
303
-
304
- if ( get_option( 'sbp_defer_exceptions4' ) ) {
305
- $defer_exceptions4 = get_option( 'sbp_defer_exceptions4' );
306
- } else {
307
- $defer_exceptions4 = '' ;
308
- }
309
-
310
- /*--------------------------------------------------------------------------------------------------------*/
311
-
312
- // Render the plugin options page HTML
313
- include( SPEED_BOOSTER_PACK_PATH . 'css/dynamic-css.php' );
314
-
315
- // Render the plugin options page HTML
316
- include( SPEED_BOOSTER_PACK_PATH . 'inc/template/options.php' );
317
-
318
- } // END public function sbp_plugin_settings_page()
319
-
320
-
321
-
322
- } // END class Speed_Booster_Pack_Options
323
-
324
- } // END if(!class_exists('Speed_Booster_Pack_Options'))
1
+ <?php
2
+
3
+ if ( ! class_exists( 'Speed_Booster_Pack_Options' ) ) {
4
+
5
+ class Speed_Booster_Pack_Options {
6
+
7
+ private $sbp_options;
8
+
9
+ /*--------------------------------------------------------------------------------------------------------
10
+ Construct the plugin object
11
+ ---------------------------------------------------------------------------------------------------------*/
12
+
13
+ public function __construct() {
14
+
15
+ add_action( 'admin_init', array( $this, 'sbp_admin_init' ) );
16
+ add_action( 'admin_menu', array( $this, 'sbp_add_menu' ) );
17
+ add_action( 'wp_footer', array( $this, 'sbp_detected_scripts_handle' ), 999 );
18
+ add_action( 'wp_footer', array( $this, 'sbp_detected_scripts_src' ), 999 );
19
+ add_action( 'wp_footer', array( $this, 'sbp_detected_styles_handle' ), 999 );
20
+
21
+ } // END public function __construct
22
+
23
+
24
+ public function sbp_admin_init() {
25
+
26
+ register_setting( 'speed_booster_settings_group', 'sbp_settings' );
27
+ register_setting( 'speed_booster_settings_group', 'sbp_integer' );
28
+ register_setting( 'speed_booster_settings_group', 'sbp_css_exceptions' );
29
+ register_setting( 'speed_booster_settings_group', 'sbp_sanitize' );
30
+
31
+ register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions1' );
32
+ register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions2' );
33
+ register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions3' );
34
+ register_setting( 'speed_booster_settings_group', 'sbp_js_footer_exceptions4' );
35
+
36
+ register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions1' );
37
+ register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions2' );
38
+ register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions3' );
39
+ register_setting( 'speed_booster_settings_group', 'sbp_defer_exceptions4' );
40
+
41
+ } // END public function admin_init
42
+
43
+
44
+ /*--------------------------------------------------------------------------------------------------------
45
+ Get enqueued scripts handles
46
+ ---------------------------------------------------------------------------------------------------------*/
47
+
48
+ public function sbp_detected_scripts_handle( $handles = array() ) {
49
+
50
+ global $wp_scripts;
51
+
52
+
53
+ // scripts
54
+ foreach ( $wp_scripts->registered as $registered ) {
55
+ $script_urls[ $registered->handle ] = $registered->src;
56
+ }
57
+
58
+ // if empty
59
+ if ( empty( $handles ) ) {
60
+ $handles = array_merge( $wp_scripts->done );
61
+ array_values( $handles );
62
+ }
63
+ // output of values
64
+ $get_enqueued_scripts_handle = '';
65
+ foreach ( $handles as $handle ) {
66
+ if ( ! empty( $script_urls[ $handle ] ) ) {
67
+ $get_enqueued_scripts_handle .= $handle . '<br />';
68
+ }
69
+
70
+ }
71
+
72
+ update_option( 'all_theme_scripts_handle', $get_enqueued_scripts_handle );
73
+
74
+ }
75
+
76
+ /*--------------------------------------------------------------------------------------------------------
77
+ Get enqueued scripts src path
78
+ ---------------------------------------------------------------------------------------------------------*/
79
+
80
+ public function sbp_detected_scripts_src( $handles = array() ) {
81
+
82
+ global $wp_scripts;
83
+
84
+ // scripts
85
+ foreach ( $wp_scripts->registered as $registered ) {
86
+ $script_urls[ $registered->handle ] = $registered->src;
87
+ }
88
+
89
+ // if empty
90
+ if ( empty( $handles ) ) {
91
+ $handles = array_merge( $wp_scripts->done );
92
+ array_values( $handles );
93
+ }
94
+ // output of values
95
+ $get_enqueued_scripts_src = '';
96
+ foreach ( $handles as $handle ) {
97
+ if ( ! empty( $script_urls[ $handle ] ) ) {
98
+ $get_enqueued_scripts_src .= $script_urls[ $handle ] . '<br />';
99
+ }
100
+
101
+ }
102
+
103
+ update_option( 'all_theme_scripts_src', $get_enqueued_scripts_src );
104
+
105
+ }
106
+
107
+
108
+ /*--------------------------------------------------------------------------------------------------------
109
+ Get enqueued style handles
110
+ ---------------------------------------------------------------------------------------------------------*/
111
+
112
+ public function sbp_detected_styles_handle( $handles = array() ) {
113
+
114
+ global $wp_styles;
115
+
116
+
117
+ // scripts
118
+ foreach ( $wp_styles->registered as $registered ) {
119
+ $style_urls[ $registered->handle ] = $registered->src;
120
+ }
121
+
122
+ // if empty
123
+ if ( empty( $handles ) ) {
124
+ $handles = array_merge( $wp_styles->queue );
125
+ array_values( $handles );
126
+ }
127
+ // output of values
128
+ $get_enqueued_styles_handle = '';
129
+ foreach ( $handles as $handle ) {
130
+ if ( ! empty( $style_urls[ $handle ] ) ) {
131
+ $get_enqueued_styles_handle .= $handle . '<br />';
132
+ }
133
+
134
+ }
135
+
136
+ update_option( 'all_theme_styles_handle', $get_enqueued_styles_handle );
137
+
138
+ }
139
+
140
+
141
+ /*--------------------------------------------------------------------------------------------------------
142
+ Sanitize Options
143
+ ---------------------------------------------------------------------------------------------------------*/
144
+
145
+ public function sbp_sanitize( $input ) {
146
+
147
+ $output = array();
148
+
149
+ foreach ( $input as $key => $tigu ) {
150
+
151
+ switch ( $key ) {
152
+ case 'sbp_js_footer_exceptions1':
153
+ $output[ $key ] = esc_html( $tigu );
154
+ break;
155
+ case 'sbp_js_footer_exceptions2':
156
+ $output[ $key ] = esc_html( $tigu );
157
+ break;
158
+ case 'sbp_js_footer_exceptions3':
159
+ $output[ $key ] = esc_html( $tigu );
160
+ break;
161
+ case 'sbp_js_footer_exceptions4':
162
+ $output[ $key ] = esc_html( $tigu );
163
+ break;
164
+ }
165
+
166
+ }
167
+
168
+ return $output;
169
+ }
170
+
171
+
172
+ /*--------------------------------------------------------------------------------------------------------
173
+ // Add a page to manage the plugin's settings
174
+ ---------------------------------------------------------------------------------------------------------*/
175
+
176
+ public function sbp_add_menu() {
177
+
178
+ global $sbp_settings_page;
179
+ $sbp_settings_page = add_menu_page( __( 'Speed Booster Options', 'sb-pack' ), __( 'Speed Booster', 'sb-pack' ), 'manage_options', 'sbp-options', array(
180
+ $this,
181
+ 'sbp_plugin_settings_page',
182
+ ), plugin_dir_url( __FILE__ ) . 'images/icon-16x16.png' );
183
+
184
+ } // END public function add_menu()
185
+
186
+
187
+ public function sbp_plugin_settings_page() {
188
+
189
+ if ( ! current_user_can( 'manage_options' ) ) {
190
+ wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
191
+ }
192
+
193
+
194
+ /*--------------------------------------------------------------------------------------------------------
195
+ Global Variables used on options HTML page
196
+ ---------------------------------------------------------------------------------------------------------*/
197
+
198
+ global $sbp_options;
199
+
200
+ // Global variables used in plugin options page
201
+ $url = get_site_url();
202
+ $response = wp_remote_get( $url, array() );
203
+ $page_time = get_option( 'sbp_page_time' );
204
+ $page_queries = get_option( 'sbp_page_queries' );
205
+ $get_enqueued_scripts_handle = get_option( 'all_theme_scripts_handle' );
206
+ $get_enqueued_scripts_src = get_option( 'all_theme_scripts_src' );
207
+ $get_enqueued_styles_handle = get_option( 'all_theme_styles_handle' );
208
+
209
+ // fallback for image compression integer
210
+ if ( get_option( 'sbp_integer' ) ) {
211
+ $this->image_compression = get_option( 'sbp_integer' );
212
+ } else {
213
+ $this->image_compression = 75;
214
+ }
215
+ $this->plugin_url = plugin_dir_url( dirname( __FILE__ ) );
216
+
217
+ // fallback for stylesheets exception handle
218
+ if ( get_option( 'sbp_css_exceptions' ) ) {
219
+ $css_exceptions = get_option( 'sbp_css_exceptions' );
220
+ } else {
221
+ $css_exceptions = '';
222
+ }
223
+
224
+ /*--------------------------------------------------------------------------------------------------------*/
225
+
226
+ if ( get_option( 'sbp_js_footer_exceptions1' ) ) {
227
+ $js_footer_exceptions1 = get_option( 'sbp_js_footer_exceptions1' );
228
+ } else {
229
+ $js_footer_exceptions1 = '';
230
+ }
231
+
232
+ if ( get_option( 'sbp_js_footer_exceptions2' ) ) {
233
+ $js_footer_exceptions2 = get_option( 'sbp_js_footer_exceptions2' );
234
+ } else {
235
+ $js_footer_exceptions2 = '';
236
+ }
237
+
238
+ if ( get_option( 'sbp_js_footer_exceptions3' ) ) {
239
+ $js_footer_exceptions3 = get_option( 'sbp_js_footer_exceptions3' );
240
+ } else {
241
+ $js_footer_exceptions3 = '';
242
+ }
243
+
244
+ if ( get_option( 'sbp_js_footer_exceptions4' ) ) {
245
+ $js_footer_exceptions4 = get_option( 'sbp_js_footer_exceptions4' );
246
+ } else {
247
+ $js_footer_exceptions4 = '';
248
+ }
249
+
250
+ /*--------------------------------------------------------------------------------------------------------*/
251
+
252
+
253
+
254
+ if ( get_option( 'sbp_defer_exceptions1' ) ) {
255
+ $defer_exceptions1 = get_option( 'sbp_defer_exceptions1' );
256
+ } else {
257
+ $defer_exceptions1 = '';
258
+ }
259
+
260
+ if ( get_option( 'sbp_defer_exceptions2' ) ) {
261
+ $defer_exceptions2 = get_option( 'sbp_defer_exceptions2' );
262
+ } else {
263
+ $defer_exceptions2 = '';
264
+ }
265
+
266
+ if ( get_option( 'sbp_defer_exceptions3' ) ) {
267
+ $defer_exceptions3 = get_option( 'sbp_defer_exceptions3' );
268
+ } else {
269
+ $defer_exceptions3 = '';
270
+ }
271
+
272
+ if ( get_option( 'sbp_defer_exceptions4' ) ) {
273
+ $defer_exceptions4 = get_option( 'sbp_defer_exceptions4' );
274
+ } else {
275
+ $defer_exceptions4 = '';
276
+ }
277
+
278
+ /*--------------------------------------------------------------------------------------------------------*/
279
+
280
+
281
+
282
+ // Render the plugin options page HTML
283
+ include( SPEED_BOOSTER_PACK_PATH . 'inc/template/options.php' );
284
+
285
+ } // END public function sbp_plugin_settings_page()
286
+
287
+
288
+ } // END class Speed_Booster_Pack_Options
289
+
290
+ } // END if(!class_exists('Speed_Booster_Pack_Options'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/template/notice.php CHANGED
@@ -1,17 +1,17 @@
1
- <div class='notice notice-warning' id='sbp-news' style="padding-top: 7px">
2
- <div style="float:right;"><a href="javascript:dismissNews()" class="button" style="margin-top:10px;"><?php _e('Dismiss','sb-pack');?></a></div>
3
- <strong><?php _e('Speed Booster Pack','sb-pack');?></strong>
4
- <p><?php printf(__('Check out the %s Plugin settings %s for new features that can make your site load faster.','sb-pack'), '<a href="options-general.php?page=sbp-options">', '</a>');?></p>
5
- </div>
6
- <script>
7
- function dismissNews() {
8
- jQuery("#sbp-news").hide();
9
- var data = { action : 'sbp_dismiss_notices'};
10
- jQuery.get('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
11
- data = JSON.parse(response);
12
- if(data["Status"] == 0) {
13
- console.log("dismissed");
14
- }
15
- });
16
- }
17
- </script>
1
+ <div class='notice notice-warning' id='sbp-news' style="padding-top: 7px">
2
+ <div style="float:right;"><a href="javascript:dismissNews()" class="button" style="margin-top:10px;"><?php _e('Dismiss','sb-pack');?></a></div>
3
+ <strong><?php _e('Speed Booster Pack','sb-pack');?></strong>
4
+ <p><?php printf(__('Check out the %s Plugin settings %s for new features that can make your site load faster.','sb-pack'), '<a href="admin.php?page=sbp-options">', '</a>');?></p>
5
+ </div>
6
+ <script>
7
+ function dismissNews() {
8
+ jQuery("#sbp-news").hide();
9
+ var data = { action : 'sbp_dismiss_notices'};
10
+ jQuery.get('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
11
+ data = JSON.parse(response);
12
+ if(data["Status"] == 0) {
13
+ console.log("dismissed");
14
+ }
15
+ });
16
+ }
17
+ </script>
inc/template/options.php CHANGED
@@ -1,444 +1,579 @@
1
- <div class="wrap">
2
-
3
- <div class="sb-pack">
4
-
5
- <div id="poststuff">
6
- <div id="postbox-container" class="postbox-container">
7
- <div class="meta-box-sortables ui-sortable" id="normal-sortables">
8
-
9
-
10
- <h2 class="sbp-icon"><?php echo esc_html( get_admin_page_title() ); ?></h2>
11
-
12
- <div class="welcome-panel">
13
-
14
- <div class="welcome-panel-content">
15
-
16
- <form method="post" action="options.php">
17
-
18
- <?php settings_fields( 'speed_booster_settings_group' ); ?>
19
- <div class="main-sbp-title"><h3 ><?php _e( 'Boost Your Website Speed!', 'sb-pack' ); ?></h3></div>
20
- <div class="postbox" id="tiguan1">
21
-
22
- <div title="Click to toggle" class="handlediv"><br></div>
23
- <h3 class="hndle"><span><?php _e( 'General options', 'sb-pack' ); ?></span></h3>
24
-
25
- <div class="inside">
26
-
27
- <div class="welcome-panel-column-container">
28
-
29
- <div class="welcome-panel-column">
30
-
31
- <h4><?php _e( 'Main plugin options', 'sb-pack' ); ?></h4>
32
-
33
- <p>
34
- <input id="sbp_settings[jquery_to_footer]" name="sbp_settings[jquery_to_footer]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['jquery_to_footer'] ) ); ?> />
35
- <label for="sbp_settings[jquery_to_footer]"><?php _e( 'Move scripts to the footer', 'sb-pack' ); ?></label>
36
- </p>
37
-
38
- <p>
39
- <input id="sbp_settings[use_google_libs]" name="sbp_settings[use_google_libs]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['use_google_libs'] ) ); ?> />
40
- <label for="sbp_settings[use_google_libs]"><?php _e( 'Load JS from Google Libraries', 'sb-pack' ); ?></label>
41
- </p>
42
-
43
- <p>
44
- <input id="sbp_settings[defer_parsing]" name="sbp_settings[defer_parsing]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['defer_parsing'] ) ); ?> />
45
- <label for="sbp_settings[defer_parsing]"><?php _e( 'Defer parsing of javascript files', 'sb-pack' ); ?></label>
46
- </p>
47
-
48
- <p>
49
- <input id="sbp_settings[query_strings]" name="sbp_settings[query_strings]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['query_strings'] ) ); ?> />
50
- <label for="sbp_settings[query_strings]"><?php _e( 'Remove query strings', 'sb-pack' ); ?></label>
51
- </p>
52
-
53
- <p>
54
- <?php if ( is_plugin_active('crazy-lazy/crazy-lazy.php') ) { ?>
55
- <input id="sbp_settings[lazy_load]" name="sbp_settings[lazy_load]" type="hidden" value="<?php echo(isset( $sbp_options['lazy_load'] )? '1' : '0' ); ?>" />
56
- <label for="sbp_settings[lazy_load]"><?php _e( 'Lazy loading already handled by CrazyLazy plugin', 'sb-pack' ); ?></label>
57
- <?php } else {?>
58
- <input id="sbp_settings[lazy_load]" name="sbp_settings[lazy_load]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['lazy_load'] ) ); ?> />
59
- <label for="sbp_settings[lazy_load]"><?php _e( 'Lazy load images to improve speed', 'sb-pack' ); ?></label>
60
- <?php } ?>
61
- </p>
62
-
63
-
64
- <p>
65
- <input id="sbp_settings[font_awesome]" name="sbp_settings[font_awesome]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['font_awesome'] ) ); ?> />
66
- <label for="sbp_settings[font_awesome]"><?php _e( 'Removes extra Font Awesome styles', 'sb-pack' ); ?></label>
67
- </p>
68
-
69
- </div> <!-- END welcome-panel-column -->
70
-
71
-
72
- <div class="welcome-panel-column">
73
- <h4> <?php _e( 'Other plugin settings', 'sb-pack' ); ?></h4>
74
-
75
- <p>
76
- <input id="sbp_settings[minify_html_js]" name="sbp_settings[minify_html_js]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['minify_html_js'] ) ); ?> />
77
- <label for="sbp_settings[minify_html_js]"><?php _e( 'Minify HTML and JS', 'sb-pack' ); ?></label>
78
- </p>
79
-
80
- <p>
81
- <input id="sbp_settings[remove_wsl]" name="sbp_settings[remove_wsl]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_wsl'] ) ); ?> />
82
- <label for="sbp_settings[remove_wsl]"><?php _e( 'Remove WordPress Shortlink', 'sb-pack' ); ?></label>
83
- </p>
84
-
85
- <p>
86
- <input id="sbp_settings[remove_adjacent]" name="sbp_settings[remove_adjacent]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_adjacent'] ) ); ?> />
87
- <label for="sbp_settings[remove_adjacent]"><?php _e( 'Remove Adjacent Posts Links', 'sb-pack' ); ?></label>
88
- </p>
89
-
90
- <p>
91
- <input id="sbp_settings[wml_link]" name="sbp_settings[wml_link]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['wml_link'] ) ); ?> />
92
- <label for="sbp_settings[wml_link]"><?php _e( 'Remove Windows Manifest', 'sb-pack' ); ?></label>
93
- </p>
94
-
95
- <p>
96
- <input id="sbp_settings[wp_generator]" name="sbp_settings[wp_generator]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['wp_generator'] ) ); ?> />
97
- <label for="sbp_settings[wp_generator]"><?php _e( 'Remove the WordPress Version', 'sb-pack' ); ?></label>
98
- </p>
99
-
100
- <p>
101
- <input id="sbp_settings[remove_all_feeds]" name="sbp_settings[remove_all_feeds]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_all_feeds'] ) ); ?> />
102
- <label for="sbp_settings[remove_all_feeds]"><?php _e( 'Remove all rss feed links', 'sb-pack' ); ?></label>
103
- </p>
104
-
105
- </div> <!-- END welcome-panel-column -->
106
-
107
-
108
- <div class="welcome-panel-column welcome-panel-last">
109
-
110
- <h4> <?php _e( 'Home Page Load Stats', 'sb-pack' ); ?></h4>
111
-
112
- <span class="sbp-stats"><?php _e( 'Page loading time in seconds:', 'sb-pack' ); ?></span>
113
-
114
- <div class="sbp-progress time">
115
- <span></span>
116
- </div>
117
-
118
- <div class="sbp-values">
119
- <div class="sbp-numbers">
120
- <?php echo $page_time; ?> <?php _e( 's', 'sb-pack' ); ?>
121
- </div>
122
- </div>
123
-
124
- <span class="sbp-stats"><?php _e( 'Number of executed queries:', 'sb-pack' ); ?></span>
125
-
126
- <div class="sbp-progress queries">
127
- <span></span>
128
- </div>
129
-
130
- <div class="sbp-values">
131
- <div class="sbp-numbers">
132
- <?php echo $page_queries; ?> <?php _e( 'q', 'sb-pack' ); ?>
133
- </div>
134
- </div>
135
-
136
- <div class="debug-info">
137
- <strong><?php _e( 'Peak Memory Used:', 'sb-pack' ); ?></strong> <span><?php echo number_format( ( memory_get_peak_usage()/1024/1024 ), 2, ',', '' ) . ' / ' . ini_get( 'memory_limit' ), '<br />'; ?></span>
138
- <strong><?php _e( 'Active Plugins:', 'sb-pack' ); ?></strong> <span><?php echo count( get_option( 'active_plugins' ) ) ; ?></span>
139
- </div>
140
-
141
- </div> <!-- END welcome-panel-column welcome-panel-last -->
142
-
143
- </div> <!-- END welcome-panel-column-container -->
144
-
145
- </div>
146
- </div>
147
-
148
- <div style="display: block;" class="postbox closed" id="tiguan2">
149
- <div title="Click to toggle" class="handlediv"><br></div><h3 class="hndle"><?php _e( 'Exclude scripts from being moved to the footer', 'sb-pack' ); ?></h3>
150
- <div class="inside">
151
-
152
- <div class="sbp-inline-wrap">
153
- <div class="sbp-columns1">
154
-
155
- <h4><?php _e( 'Script Handle', 'sb-pack' ); ?></h4>
156
-
157
- <p>
158
- <input type="text" name="sbp_js_footer_exceptions1" id="sbp_js_footer_exceptions1" value="<?php echo $js_footer_exceptions1; ?>" />
159
- </p>
160
-
161
- <p>
162
- <input type="text" name="sbp_js_footer_exceptions2" id="sbp_js_footer_exceptions2" value="<?php echo $js_footer_exceptions2; ?>" />
163
- </p>
164
-
165
- <p>
166
- <input type="text" name="sbp_js_footer_exceptions3" id="sbp_js_footer_exceptions3" value="<?php echo $js_footer_exceptions3; ?>" />
167
- </p>
168
-
169
- <p>
170
- <input type="text" name="sbp_js_footer_exceptions4" id="sbp_js_footer_exceptions4" value="<?php echo $js_footer_exceptions4; ?>" />
171
- </p>
172
-
173
-
174
- </div>
175
-
176
- <div class="sbp-columns2">
177
-
178
- <h4><?php _e( 'Copy the HTML code of the script from your page source and add it below', 'sb-pack' ); ?></h4>
179
-
180
-
181
- <p>
182
- <input type="text" name="sbp_head_html_script1" id="sbp_head_html_script1" class="regular-text" value="<?php echo $sbp_html_script1; ?>" />
183
- </p>
184
-
185
- <p>
186
- <input type="text" name="sbp_head_html_script2" id="sbp_head_html_script2" class="regular-text" value="<?php echo $sbp_html_script2; ?>" />
187
- </p>
188
-
189
- <p>
190
- <input type="text" name="sbp_head_html_script3" id="sbp_head_html_script3" class="regular-text" value="<?php echo $sbp_html_script3; ?>" />
191
- </p>
192
-
193
- <p>
194
- <input type="text" name="sbp_head_html_script4" id="sbp_head_html_script4" class="regular-text" value="<?php echo $sbp_html_script4; ?>" />
195
- </p>
196
-
197
- </div>
198
- </div>
199
-
200
- <p class="description">
201
- <?php _e('Enter one js handle per text field, in the left area and the correspondent html script in the right text fields.', 'sb-pack' ); ?> <?php _e( 'Read more', 'sb-pack' ); ?> <a href="http://tiguandesign.com/docs/speed-booster/#exclude-scripts-from-being-moved-to-the-footer-50" target="_blank" title="Documentation"><?php _e( 'detailed instructions', 'sb-pack' ); ?></a> <?php _e( 'on this option on plugin documentation.', 'sb-pack' ); ?> <br /> <?php _e( 'If you want to exclude more than 4 scripts, your page score will be hit and therefore the use of "Move scripts to footer" option will become useless so you can disable it.', 'sb-pack' ); ?>
202
- </p>
203
- <div class="td-border-last"></div>
204
-
205
- <p>
206
- <h4 class="hndle"><?php _e( 'As a guidance, here is a list of script handles and script paths of each enqueued script detected by our plugin:', 'sb-pack' ); ?></h4>
207
- </p>
208
-
209
- <div class="sbp-all-enqueued">
210
-
211
- <div class="sbp-div-head">
212
- <div class="sbp-title-scripts"><?php _e('Script Handle', 'sb-pack' ); ?></div>
213
- <div class="sbp-title-scripts"><?php _e('Script Path', 'sb-pack' ); ?></div>
214
- </div>
215
-
216
- <div class="sbp-inline-wrap">
217
-
218
- <div class="sbp-columns1 sbp-width">
219
- <?php echo get_option( 'all_theme_scripts_handle' ) ; ?>
220
- </div>
221
-
222
- <div class="sbp-columns2 sbp-width">
223
- <?php echo get_option( 'all_theme_scripts_src' ) ; ?>
224
- </div>
225
-
226
-
227
- </div>
228
-
229
- </div>
230
- <p class="description">
231
- <?php _e('*The list may be incomplete in some circumstances.', 'sb-pack' ); ?>
232
- </p>
233
- </div>
234
- </div>
235
-
236
-
237
-
238
- <div style="display: block;" class="postbox closed" id="tiguan3">
239
- <div title="Click to toggle" class="handlediv"><br></div><h3 class="hndle"><?php _e( 'Exclude scripts from being deferred', 'sb-pack' ); ?></h3>
240
- <div class="inside">
241
-
242
- <div class="sbp-inline-wrap">
243
-
244
- <p>
245
- <input type="text" class="sbp-more-width" name="sbp_defer_exceptions1" id="sbp_defer_exceptions1" value="<?php echo $defer_exceptions1; ?>" />
246
- </p>
247
-
248
- <p>
249
- <input type="text" class="sbp-more-width" name="sbp_defer_exceptions2" id="sbp_defer_exceptions2" value="<?php echo $defer_exceptions2; ?>" />
250
- </p>
251
-
252
- <p>
253
- <input type="text" class="sbp-more-width" name="sbp_defer_exceptions3" id="sbp_defer_exceptions3" value="<?php echo $defer_exceptions3; ?>" />
254
- </p>
255
-
256
- <p>
257
- <input type="text" class="sbp-more-width" name="sbp_defer_exceptions4" id="sbp_defer_exceptions4" value="<?php echo $defer_exceptions4; ?>" />
258
- </p>
259
-
260
-
261
- </div>
262
- <p class="description">
263
- <?php _e('Enter one by text field, the final part of the js files that you want to be excluded from defer parsing option. For example: <code>jquery.min.js</code> If you want to exclude more than 4 scripts, your page score will be hit and therefore the use of "Defer parsing of javascript files" option will become useless so you can disable it', 'sb-pack' ); ?>
264
- </p>
265
-
266
- </div>
267
- </div>
268
-
269
-
270
- <div style="display: block;" class="postbox closed" id="tiguan4">
271
- <div title="Click to toggle" class="handlediv"><br></div><h3 class="hndle sbp-emphasize"><?php _e( 'Change the default image compression level', 'sb-pack' ); ?></h3>
272
- <div class="inside">
273
-
274
-
275
-
276
- <script type='text/javascript'>
277
- var jpegCompression = '<?php echo $this->image_compression; ?>';
278
- </script>
279
-
280
- <div>
281
-
282
- <p class="sbp-amount">
283
- <?php _e( 'Compression level:', 'sb-pack' ); ?><input type="text" class="sbp-amount" id="sbp-amount" />
284
- </p>
285
-
286
- <p>
287
- <div class="sbp-slider" id="sbp-slider"></div>
288
- <input type="hidden" name="sbp_integer" id="sbp_integer" value="<?php echo $this->image_compression; ?>" />
289
- </p>
290
-
291
- <p class="description">
292
- <?php _e( 'The default image compression setting in WordPress is 90%. Compressing your images further than the default will make your file sizes even smaller and will boost your site performance. As a reference, a lower level of compression means more performance but might induce quality loss. We recommend you choose a compression level between 50 and 75.', 'sb-pack' ); ?><br />
293
- </p>
294
- <p class="description"><strong>
295
- <?php _e( 'Note that any changes you make will only affect new images uploaded to your site. A specialized plugin can optimize all your present images and will also optimize new ones as they are added. ', 'sb-pack' ); ?>
296
- </strong></p>
297
- <br>
298
- <p class="description sp-link"><strong>
299
- <a href="https://shortpixel.com/h/af/U3NQVWK31472" target="_blank">
300
- <?php _e( 'Test your website with ShortPixel for free to see how much you could gain by optimizing your images.', 'sb-pack' ); ?>
301
- </a>
302
- </strong></p>
303
- <a href="https://shortpixel.com/h/af/U3NQVWK31472" target="_blank"><img src="<?php echo $this->plugin_url . "inc/images/sp.png"; ?>" class="sbp-sp"/></a>
304
- <p class="description">
305
- <?php _e( 'ShortPixel is an easy to use, comprehensive, stable and frequently updated image optimization plugin supported by the friendly team that created it. Using a powerful set of specially tuned algorithms, it squeezes the most of each image striking the best balance between image size and quality. Current images can be all optimized with a single click. Newly added images are automatically resized/rescaled and optimized on the fly, in the background.', 'sb-pack' ); ?>
306
- </p>
307
- <p class="description-link">
308
- <a href="https://shortpixel.com/h/af/U3NQVWK31472" target="_blank">&gt;&gt; <?php _e( 'More info', 'sb-pack' ); ?></a>
309
- </p>
310
- </div>
311
-
312
- </div>
313
- </div>
314
-
315
-
316
- <div style="display: block;" class="postbox closed" id="tiguan5">
317
- <div title="Click to toggle" class="handlediv"><br></div><h3 class="hndle"><?php _e( 'Still need more speed?', 'sb-pack' ); ?></h3>
318
- <div class="inside">
319
-
320
-
321
- <p>
322
- <input id="sbp_css_async" name="sbp_settings[sbp_css_async]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_css_async'] ) ); ?> />
323
- <label for="sbp_css_async"><?php _e( 'Load CSS asynchronously', 'sb-pack' ); ?></label>
324
- </p>
325
-
326
-
327
- <div id="sbp-css-content">
328
-
329
- <p>
330
- <input id="sbp_settings[sbp_css_minify]" name="sbp_settings[sbp_css_minify]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_css_minify'] ) ); ?> />
331
- <label for="sbp_settings[sbp_css_minify]"><?php _e( 'Minify all CSS styles', 'sb-pack' ); ?></label>
332
- </p>
333
-
334
- <div class="sbp-radio-content">
335
-
336
- <p>
337
- <input id="sbp_settings[sbp_footer_css]" name="sbp_settings[sbp_footer_css]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_footer_css'] ) ); ?> />
338
- <label for="sbp_settings[sbp_footer_css]"><?php _e( 'Insert all CSS styles inline to the footer', 'sb-pack' ); ?></label>
339
- </p>
340
-
341
- <p>
342
- <input id="sbp_settings[sbp_is_mobile]" name="sbp_settings[sbp_is_mobile]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_is_mobile'] ) ); ?> />
343
- <label for="sbp_settings[sbp_is_mobile]"><?php _e( 'Disable all above CSS options on mobile devices', 'sb-pack' ); ?></label>
344
- </p>
345
-
346
- <div class="td-border-last"></div>
347
-
348
- <h4><?php _e( 'Exclude styles from asynchronously option: ', 'sb-pack' ); ?></h4>
349
- <p><textarea cols="50" rows="3" name="sbp_css_exceptions" id="sbp_css_exceptions" value="<?php echo $css_exceptions; ?>" /><?php echo $css_exceptions; ?></textarea></p>
350
- <p class="description">
351
- <?php _e('Enter one by line, the handles of css files or the final part of the style URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</code>', 'sb-pack' ); ?>
352
- </p>
353
-
354
-
355
- <div class="td-border-last"></div>
356
-
357
- <p>
358
- <h4 class="hndle"><?php _e( 'As a guidance, here is a list of css handles of each enqueued style detected by our plugin:', 'sb-pack' ); ?></h4>
359
- </p>
360
-
361
- <div class="sbp-all-enqueued">
362
-
363
- <div class="sbp-div-head">
364
- <div class="sbp-title-scripts"><?php _e('CSS Handle', 'sb-pack' ); ?></div>
365
- </div>
366
-
367
- <div class="sbp-inline-wrap">
368
- <div class="sbp-columns1 sbp-width">
369
- <?php echo get_option( 'all_theme_styles_handle' ) ; ?>
370
- </div>
371
- </div>
372
-
373
- </div>
374
-
375
- <p class="description">
376
- <?php _e('*The list may be incomplete in some circumstances.', 'sb-pack' ); ?>
377
- </p>
378
-
379
-
380
-
381
- <div class="td-border-last"></div>
382
- <h4 class="sbp-icon-information"><?php _e( 'Additional information:', 'sb-pack' ); ?></h4>
383
- <p class ="description"><strong><?php _e( 'Insert all CSS styles inline to the footer: ', 'sb-pack' ); ?></strong><?php _e( 'this option will eliminate render-blocking CSS warning in Google Page Speed test. If there is something broken after activation, you need to disable this option. Please note that before enabling this sensitive option, it is strongly recommended that you also enable the "Move scripts to the footer" option.', 'sb-pack' ); ?></p>
384
-
385
- </div>
386
- </div>
387
- </div><!-- END sbp-radio-content -->
388
- </div><!-- END sbp-css-content -->
389
-
390
-
391
-
392
- <?php submit_button() ?>
393
-
394
- </form>
395
-
396
- </div> <!-- END welcome-panel-content -->
397
-
398
- </div> <!-- END welcome-panel -->
399
-
400
- <div class="col-fulwidth feedback-box">
401
- <h3>
402
- <?php esc_html_e( 'Lend a hand & share your thoughts', 'saboxplugin' ); ?>
403
- <img src="<?php echo $this->plugin_url . "inc/images/handshake.png"; ?>">
404
- </h3>
405
- <p>
406
- <?php
407
- echo vsprintf(
408
- // Translators: 1 is Theme Name, 2 is opening Anchor, 3 is closing.
409
- __( 'We\'ve been working hard on making %1$s the best one out there. We\'re interested in hearing your thoughts about %1$s and what we could do to <u>make it even better</u>.<br/> <br/> %2$sHave your say%3$s', 'sb-pack' ),
410
- array(
411
- 'Speed Booster Pack',
412
- '<a class="button button-feedback" target="_blank" href="http://bit.ly/feedback-speed-booster-pack">',
413
- '</a>',
414
- )
415
- );
416
- ?>
417
- </p>
418
- </div>
419
-
420
- <!-- START docs and version areas -->
421
-
422
- <div class="sbp-title-div">
423
- <div class="sbp-title">
424
- <?php _e( 'What do these settings mean?', 'sb-pack' ); ?>
425
- </div>
426
- </div>
427
-
428
- <div class="sbp-box"><!-- start sbp-box div 1 -->
429
-
430
- <div class="sbp-box-legend">
431
- <i class="sbp-icon-help"></i>
432
- </div>
433
-
434
- <p><a href="http://tiguandesign.com/docs/speed-booster/" target="_blank" title="Documentation"><?php _e( 'Read online plugin documentation', 'sb-pack' ); ?></a><?php _e( ' with guidelines to enhance your website performance.', 'sb-pack' ); ?></p>
435
-
436
- </div> <!-- end sbp-box div 1-->
437
-
438
- <!-- END docs and version areas -->
439
- </div>
440
- </div>
441
- </div>
442
- </div> <!-- END sb-pack-->
443
-
444
- </div> <!-- end wrap div -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // handle closed postboxes
4
+ $user_id = get_current_user_id();
5
+ $option_name = 'closedpostboxes_' . 'toplevel_page_sbp-options'; // use the "pagehook" ID
6
+ $option_arr = get_user_option( $option_name, $user_id ); // get the options for that page
7
+
8
+
9
+ if ( is_array( $option_arr ) && in_array( 'exclude-from-footer', $option_arr ) ) {
10
+ $closed = true;
11
+ }
12
+
13
+
14
+ if ( is_array( $option_arr ) && in_array( 'defer-from-footer', $option_arr ) ) {
15
+ $closed_defer = true;
16
+ }
17
+
18
+ ?>
19
+
20
+ <div class="wrap about-wrap">
21
+ <div class="sb-pack">
22
+
23
+ <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
24
+
25
+ <div class="about-text">
26
+ <?php
27
+ /* Translators: Welcome Screen Description. */
28
+ echo esc_html__( 'Speed Booster Pack is a lightweight, frequently updated, easy to use and well supported plugin which allows you to improve your website’s loading speed. Visitors usually close a website if it doesn’t load in a few seconds and the slower a site loads the greater the chances are that the visitors will leave. And you don’t want that to happen, do you?
29
+ ', 'sb-pack' );
30
+ ?>
31
+ </div>
32
+ <div class="wp-badge sbp-welcome-logo"></div>
33
+ <div class="sbp-fast-as-a-rabbit">
34
+ <div class="sbp-speed-page-load">
35
+ <?php _e( 'Page load: ', 'sb-pack' ); ?>
36
+ <span><?php echo esc_html( $page_time ) . __( ' sec', 'sb-pack' ); ?></span>
37
+ <span class="sbp-progress-bar">
38
+ <?php if ( $page_time < 10 ) { ?>
39
+ <progress max="100" value="<?php echo $page_time * 10; ?>">
40
+ <?php } else { ?>
41
+ <progress max="100" value="100" class="sbp-progress-red">
42
+ <?php } ?>
43
+ </progress>
44
+
45
+ <?php if ( ( $page_time ) > 10 ) { ?>
46
+ <img draggable="false" class="emoji" title="Your page loading time just made us cry" alt="😥" src="https://s.w.org/images/core/emoji/2.4/svg/1f625.svg">
47
+ <?php } else if ( ( $page_time ) > 8 && ( $page_time ) < 10 ) { ?>
48
+ <img draggable="false" class="emoji" title="Your page loading time just made us cry" alt="😥" src="https://s.w.org/images/core/emoji/2.4/svg/1f625.svg">
49
+ <?php } else if ( ( $page_time ) > 6 && ( $page_time ) < 8 ) { ?>
50
+ <img draggable="false" class="emoji" title="I'm not gonna lie, things aren't looking to good" alt="😮" src="https://s.w.org/images/core/emoji/2.4/svg/1f62e.svg">
51
+ <?php } else if ( ( $page_time ) > 4 && ( $page_time ) < 6 ) { ?>
52
+ <img draggable="false" class="emoji" title="Could be better" alt="🙄" src="https://s.w.org/images/core/emoji/2.4/svg/1f644.svg">
53
+ <?php } else if ( ( $page_time ) > 2 && ( $page_time ) < 4 ) { ?>
54
+ <img draggable="false" class="emoji" title="Going strong" alt="😥" src="https://s.w.org/images/core/emoji/2.4/svg/1f625.svg">
55
+ <?php } else if ( ( $page_time ) < 2 ) { ?>
56
+ <img draggable="false" title="You're a star" class="emoji" alt="⭐" src="https://s.w.org/images/core/emoji/2.4/svg/2b50.svg">
57
+ <?php } ?>
58
+ </span>
59
+
60
+ </div>
61
+ <div class="sbp-speed-db-queries">
62
+ <i class="dashicons dashicons-dashboard"></i><span><?php echo esc_html( $page_queries ); ?></span> <?php _e( 'DB Queries', 'sb-pack' ); ?>
63
+ </div>
64
+
65
+ <div class="sbp-speed-memory-usage">
66
+ <i class="dashicons dashicons-chart-pie"></i>
67
+ <?php _e( 'Memory: ', 'sb-pack' ); ?>
68
+ <span><?php echo number_format( ( memory_get_peak_usage() / 1024 / 1024 ), 1, ',', '' ) . ' / ' . ini_get( 'memory_limit' ), '<br />'; ?></span>
69
+
70
+ </div>
71
+
72
+ <div class="sbp-speed-plugin-number">
73
+ <i class="dashicons dashicons-admin-plugins"></i>
74
+ <?php _e( 'Plugins: ', 'sb-pack' ); ?>
75
+ <span><?php echo count( get_option( 'active_plugins' ) ); ?></span>
76
+ </div>
77
+
78
+ <div class="sbp-speed-info-analyze-container">
79
+ <!-- <a href="#" class="button button-secondary"><i class="dashicons dashicons-info"></i></a> -->
80
+ <!-- <a href="#" class="button button-primary"><i class="dashicons dashicons-search"></i><?php _e( 'Analyse', 'sb-pack' ); ?> -->
81
+ </a>
82
+ </div>
83
+ </div>
84
+
85
+ <h2 class="nav-tab-wrapper wp-clearfix">
86
+ <a class="nav-tab" href="#general-options"><?php esc_html_e( 'General', 'sb-pack' ); ?></a>
87
+ <a class="nav-tab" href="#advanced-options"><?php esc_html_e( 'Advanced', 'sb-pack' ); ?></a>
88
+ <a class="nav-tab" href="#image-options"><?php esc_html_e( 'Image Optimization', 'sb-pack' ); ?></a>
89
+ <a class="nav-tab" href="#support"><?php esc_html_e( 'Support', 'sb-pack' ); ?></a>
90
+ <a class="nav-tab" href="#optimize-more"><?php esc_html_e( 'Optimize More', 'sb-pack' ); ?></a>
91
+ </h2>
92
+
93
+ <form method="post" action="options.php">
94
+
95
+ <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
96
+ <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
97
+ <?php settings_fields( 'speed_booster_settings_group' ); ?>
98
+
99
+ <div id="general-options" class="sb-pack-tab">
100
+
101
+ <h3><?php _e( 'General', 'sb-pack' ); ?></h3>
102
+
103
+ <p>
104
+ <input id="sbp_settings[jquery_to_footer]" name="sbp_settings[jquery_to_footer]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['jquery_to_footer'] ) ); ?> />
105
+ <label for="sbp_settings[jquery_to_footer]"><?php _e( 'Move scripts to the footer', 'sb-pack' ); ?></label>
106
+ <span class="tooltip-right"
107
+ data-tooltip="<?php echo __( 'This option move all scripts to the footer while keeping stylesheets in the header to improve page loading speed and get a higher score on the major speed testing sites such as GTmetrix or other website speed testing tools.', 'sb-pack' ); ?>">
108
+ <i class="dashicons dashicons-editor-help"></i>
109
+ </span>
110
+
111
+ </p>
112
+
113
+ <p>
114
+ <input id="sbp_settings[use_google_libs]" name="sbp_settings[use_google_libs]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['use_google_libs'] ) ); ?> />
115
+ <label for="sbp_settings[use_google_libs]"><?php _e( 'Load JS from Google Libraries', 'sb-pack' ); ?></label>
116
+ <span class="tooltip-right"
117
+ data-tooltip="<?php echo __( 'Loading WordPress javascript files from Google’s Libraries rather than serving it from your WordPress install directly, will reduce latency, increase parallelism and improve caching.', 'sb-pack' ); ?>">
118
+ <i class="dashicons dashicons-editor-help"></i>
119
+ </span>
120
+ </p>
121
+
122
+ <p>
123
+ <input id="sbp_settings[minify_html_js]" name="sbp_settings[minify_html_js]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['minify_html_js'] ) ); ?> />
124
+ <label for="sbp_settings[minify_html_js]"><?php _e( 'Minify HTML', 'sb-pack' ); ?></label>
125
+ <span class="tooltip-right"
126
+ data-tooltip="<?php echo __( 'Activate this option only if you don’t want to use other minify plugins or other speed optimization plugin that has minify option included. If something goes wrong, simply uncheck this option and save the settings.', 'sb-pack' ); ?>">
127
+ <i class="dashicons dashicons-editor-help"></i>
128
+ </span>
129
+ </p>
130
+
131
+ <p>
132
+ <input id="sbp_settings[defer_parsing]" name="sbp_settings[defer_parsing]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['defer_parsing'] ) ); ?> />
133
+ <label for="sbp_settings[defer_parsing]"><?php _e( 'Defer parsing of javascript files', 'sb-pack' ); ?></label>
134
+ <span class="tooltip-right"
135
+ data-tooltip="<?php echo __( '!!!Note: This will be disabled IF Move Scripts to Footer is enabled. By deferring parsing of unneeded JavaScript until it needs to be executed, you can reduce the initial load time of your page. Please note that this option will not defer the main WordPress jQuery script if Load JS from Google Libraries option is not checked.', 'sb-pack' ); ?>">
136
+ <i class="dashicons dashicons-editor-help"></i>
137
+ </span>
138
+ </p>
139
+
140
+ <p>
141
+ <input id="sbp_settings[query_strings]" name="sbp_settings[query_strings]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['query_strings'] ) ); ?> />
142
+ <label for="sbp_settings[query_strings]"><?php _e( 'Remove query strings', 'sb-pack' ); ?></label>
143
+ <span class="tooltip-right"
144
+ data-tooltip="<?php echo __( 'Since most proxies do not cache resources with a ? in their URL, this option allows you to remove any query strings (version numbers) from static resources like CSS & JS files, thus improving your speed scores in services like GTmetrix, PageSpeed, YSlow and Pingdoom.', 'sb-pack' ); ?>">
145
+ <i class="dashicons dashicons-editor-help"></i>
146
+ </span>
147
+ </p>
148
+
149
+ <p>
150
+ <input id="sbp_settings[font_awesome]" name="sbp_settings[font_awesome]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['font_awesome'] ) ); ?> />
151
+ <label for="sbp_settings[font_awesome]"><?php _e( 'Removes extra Font Awesome styles', 'sb-pack' ); ?></label>
152
+ <span class="tooltip-right"
153
+ data-tooltip="<?php echo __( 'Use this option only if your theme uses Font Awesome, to prevent other plugins that uses Font Awesome, to add their stylesheets to your theme. In other words, this option removes extra Font Awesome stylesheets added to your theme by certain plugins.', 'sb-pack' ); ?>">
154
+ <i class="dashicons dashicons-editor-help"></i>
155
+ </span>
156
+ </p>
157
+
158
+ <h3> <?php _e( 'More settings', 'sb-pack' ); ?></h3>
159
+
160
+ <p>
161
+ <input id="sbp_settings[remove_emojis]" name="sbp_settings[remove_emojis]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_emojis'] ) ); ?> />
162
+ <label for="sbp_settings[remove_emojis]"><?php _e( 'Remove WordPress Emoji scripts', 'sb-pack' ); ?></label>
163
+ <span class="tooltip-right"
164
+ data-tooltip="<?php echo __( 'Emojis are fun and all, but if you are aren’t using them they actually load a JavaScript file (wp-emoji-release.min.js) on every page of your website. For a lot of businesses, this is not needed and simply adds load time to your site. So we recommend disabling this.', 'sb-pack' ); ?>">
165
+ <i class="dashicons dashicons-editor-help"></i>
166
+ </span>
167
+ </p>
168
+
169
+ <p>
170
+ <input id="sbp_settings[remove_wsl]" name="sbp_settings[remove_wsl]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_wsl'] ) ); ?> />
171
+ <label for="sbp_settings[remove_wsl]"><?php _e( 'Remove WordPress Shortlink', 'sb-pack' ); ?></label>
172
+ <span class="tooltip-right"
173
+ data-tooltip="<?php echo __( 'WordPress URL shortening is sometimes useful, but it automatically adds an ugly code in your header, so you can remove it.', 'sb-pack' ); ?>">
174
+ <i class="dashicons dashicons-editor-help"></i>
175
+ </span>
176
+ </p>
177
+
178
+ <p>
179
+ <input id="sbp_settings[remove_adjacent]" name="sbp_settings[remove_adjacent]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_adjacent'] ) ); ?> />
180
+ <label for="sbp_settings[remove_adjacent]"><?php _e( 'Remove Adjacent Posts Links', 'sb-pack' ); ?></label>
181
+ <span class="tooltip-right"
182
+ data-tooltip="<?php echo __( 'WordPress incorrectly implements this feature that supposedly should fix a pagination issues but it messes up, so there is no reason to keep these around. However, some browsers may use Adjacent Posts Links to navigate your site, although you can remove it if you run a well designed theme.', 'sb-pack' ); ?>">
183
+ <i class="dashicons dashicons-editor-help"></i>
184
+ </span>
185
+ </p>
186
+
187
+ <p>
188
+ <input id="sbp_settings[wml_link]" name="sbp_settings[wml_link]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['wml_link'] ) ); ?> />
189
+ <label for="sbp_settings[wml_link]"><?php _e( 'Remove Windows Manifest', 'sb-pack' ); ?></label>
190
+ <span class="tooltip-right"
191
+ data-tooltip="<?php echo __( 'Windows Live Writer (WLW) is a Microsoft application for composing and managing blog posts offline and publish them later. If you are not using Windows Live Writer application, you can remove it from the WP head.', 'sb-pack' ); ?>">
192
+ <i class="dashicons dashicons-editor-help"></i>
193
+ </span>
194
+ </p>
195
+
196
+ <p>
197
+ <input id="sbp_settings[rsd_link]" name="sbp_settings[rsd_link]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['rsd_link'] ) ); ?> />
198
+ <label for="sbp_settings[rsd_link]"><?php _e( 'Remove RSD(Really Simple Discovery) Link', 'sb-pack' ); ?></label>
199
+ <span class="tooltip-right"
200
+ data-tooltip="<?php echo __( 'This type of link is used by blog clients. If you edit your site from your browser then you don’t need this. It is also used by some 3rd party applications that utilize XML-RPC requests. In most cases, this is just unnecessary code.', 'sb-pack' ); ?>">
201
+ <i class="dashicons dashicons-editor-help"></i>
202
+ </span>
203
+ </p>
204
+
205
+ <p>
206
+ <input id="sbp_settings[wp_generator]" name="sbp_settings[wp_generator]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['wp_generator'] ) ); ?> />
207
+ <label for="sbp_settings[wp_generator]"><?php _e( 'Remove the WordPress Version', 'sb-pack' ); ?></label>
208
+ <span class="tooltip-right"
209
+ data-tooltip="<?php echo __( 'This option is added for security reasons and cleaning the header.', 'sb-pack' ); ?>">
210
+ <i class="dashicons dashicons-editor-help"></i>
211
+ </span>
212
+ </p>
213
+
214
+ <p>
215
+ <input id="sbp_settings[remove_all_feeds]" name="sbp_settings[remove_all_feeds]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['remove_all_feeds'] ) ); ?> />
216
+ <label for="sbp_settings[remove_all_feeds]"><?php _e( 'Remove all rss feed links', 'sb-pack' ); ?></label>
217
+ <span class="tooltip-right"
218
+ data-tooltip="<?php echo __( 'This option wil remove all rss feed links to cleanup your WordPress header. It is also useful on Unicorn – The W3C Markup Validation Service to get rid out the “feed does not validate” error.', 'sb-pack' ); ?>">
219
+ <i class="dashicons dashicons-editor-help"></i>
220
+ </span>
221
+ </p>
222
+
223
+ <p>
224
+ <input id="sbp_settings[disable_xmlrpc]" name="sbp_settings[disable_xmlrpc]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['disable_xmlrpc'] ) ); ?> />
225
+ <label for="sbp_settings[disable_xmlrpc]"><?php _e( 'Disable XML-RPC', 'sb-pack' ); ?></label>
226
+ <span class="tooltip-right"
227
+ data-tooltip="<?php echo __( 'XML-RPC was added in WordPress 3.5 and allows for remote connections, and unless you are using your mobile device to post to WordPress it does more bad than good. In fact, it can open your site up to a bunch of security risks. There are a few plugins that utilize this such as JetPack, but we don’t recommend using JetPack for performance reasons.', 'sb-pack' ); ?>">
228
+ <i class="dashicons dashicons-editor-help"></i>
229
+ </span>
230
+ </p>
231
+
232
+ <h3><?php _e( 'Need even more speed?', 'sb-pack' ); ?></h3>
233
+
234
+ <p>
235
+ <input id="sbp_css_async" name="sbp_settings[sbp_css_async]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_css_async'] ) ); ?> />
236
+ <label for="sbp_css_async"><?php _e( 'Inline all CSS styles', 'sb-pack' ); ?></label>
237
+ <span class="tooltip-right"
238
+ data-tooltip="<?php echo __( 'Checking this option will inline the contents of all your stylesheets. This helps with the annoying render blocking error Google Page Speed Insights displays.', 'sb-pack' ); ?>">
239
+ <i class="dashicons dashicons-editor-help"></i>
240
+ </span>
241
+ </p>
242
+
243
+ <p>
244
+ <input id="sbp_settings[sbp_css_minify]" name="sbp_settings[sbp_css_minify]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_css_minify'] ) ); ?> />
245
+ <label for="sbp_settings[sbp_css_minify]"><?php _e( 'Minify all (previously) inlined CSS styles', 'sb-pack' ); ?></label>
246
+ <span class="tooltip-right"
247
+ data-tooltip="<?php echo __( 'Minifying all inlined CSS styles will optimize the CSS delivery and will eliminate the annoying message on Google Page Speed regarding to render-blocking css.', 'sb-pack' ); ?>">
248
+ <i class="dashicons dashicons-editor-help"></i>
249
+ </span>
250
+ </p>
251
+
252
+ <p>
253
+ <input id="sbp_settings[sbp_footer_css]" name="sbp_settings[sbp_footer_css]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_footer_css'] ) ); ?> />
254
+ <label for="sbp_settings[sbp_footer_css]"><?php _e( 'Move all inlined CSS into the footer', 'sb-pack' ); ?></label>
255
+ <span class="tooltip-right"
256
+ data-tooltip="<?php echo __( 'Inserting all CSS styles inline to the footer is a sensitive option that will eliminate render-blocking CSS warning in Google Page Speed test. If there is something broken after activation, you need to disable this option. Please note that before enabling this sensitive option, it is strongly recommended that you also enable the “ Move scripts to the footer” option.', 'sb-pack' ); ?>">
257
+ <i class="dashicons dashicons-editor-help"></i>
258
+ </span>
259
+ </p>
260
+
261
+ <p>
262
+ <input id="sbp_settings[sbp_is_mobile]" name="sbp_settings[sbp_is_mobile]" type="checkbox" value="1" <?php checked( 1, isset( $sbp_options['sbp_is_mobile'] ) ); ?> />
263
+ <label for="sbp_settings[sbp_is_mobile]"><?php _e( 'Disable all above CSS options on mobile devices', 'sb-pack' ); ?></label>
264
+ <span class="tooltip-right"
265
+ data-tooltip="<?php echo __( 'Disable all above CSS options on mobile devices: this option was added to avoid some appearance issues on mobile devices.', 'sb-pack' ); ?>">
266
+ <i class="dashicons dashicons-editor-help"></i>
267
+ </span>
268
+ </p>
269
+
270
+ <div class="td-border-last"></div>
271
+
272
+ <h4><?php _e( 'Exclude styles from being inlined and/or minified option: ', 'sb-pack' ); ?></h4>
273
+ <p>
274
+ <textarea cols="50" rows="3" name="sbp_css_exceptions" id="sbp_css_exceptions" value="<?php echo esc_attr( $css_exceptions ); ?>" /><?php echo wp_kses_post( $css_exceptions ); ?></textarea>
275
+ </p>
276
+ <p class="description">
277
+ <?php _e( 'Enter one by line, the handles of css files or the final part of the style URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</code>', 'sb-pack' ); ?>
278
+ </p>
279
+
280
+ <div class="td-border-last"></div>
281
+
282
+ <p>
283
+ <h4><?php _e( 'As a guidance, here is a list of css handles of each enqueued style detected by our plugin:', 'sb-pack' ); ?></h4>
284
+ </p>
285
+
286
+ <div class="sbp-all-enqueued">
287
+
288
+ <div class="sbp-div-head">
289
+ <div class="sbp-title-scripts"><?php _e( 'CSS Handle', 'sb-pack' ); ?></div>
290
+ </div>
291
+
292
+ <div class="sbp-inline-wrap">
293
+ <div class="sbp-columns1 sbp-width">
294
+ <?php print_r( get_option( 'all_theme_styles_handle' ) ); ?>
295
+ </div>
296
+ </div>
297
+ </div>
298
+
299
+ </div><!--#general-options-->
300
+ <div id="advanced-options" class="sb-pack-tab">
301
+
302
+ <div id="poststuff">
303
+ <div id="postbox-container-exclude-footer-scripts" class="postbox-container">
304
+ <div class="meta-box-sortables" id="normal-sortables">
305
+ <?php if ( isset( $closed ) && $closed == true ) { ?>
306
+ <div class="postbox closed" id="exclude-from-footer">
307
+ <?php } else { ?>
308
+ <div class="postbox" id="exclude-from-footer">
309
+ <?Php } ?>
310
+ <button type="button" class="handlediv" aria-expanded="true">
311
+ <span class="screen-reader-text"><?php _e( 'Exclude scripts from being moved to the footer', 'sb-pack' ); ?></span>
312
+ <span class="toggle-indicator" aria-hidden="true"></span>
313
+ </button>
314
+ <h3 class="hndle ui-sortable-handle">
315
+ <span><?php _e( 'Exclude scripts from being moved to the footer', 'sb-pack' ); ?></span>
316
+ </h3>
317
+ <div class="inside">
318
+ <div class="sbp-inline-wrap">
319
+
320
+ <h4><?php _e( 'Script Handle', 'sb-pack' ); ?></h4>
321
+ <i>
322
+ <?php _e( 'Enter one js handle per text field.', 'sb-pack' ); ?> <?php _e( 'Read more', 'sb-pack' ); ?>
323
+ <a href="https://docs.machothemes.com/article/119-plugin-options-explained#exclude-scripts-from-being-moved-to-the-footer-50" target="_blank" title="Documentation"><?php _e( 'detailed instructions', 'sb-pack' ); ?></a> <?php _e( 'on this option on plugin documentation.', 'sb-pack' ); ?>
324
+
325
+ </i>
326
+
327
+ <p>
328
+ <input type="text" name="sbp_js_footer_exceptions1" id="sbp_js_footer_exceptions1" value="<?php echo esc_attr( $js_footer_exceptions1 ); ?>" />
329
+ </p>
330
+
331
+ <p>
332
+ <input type="text" name="sbp_js_footer_exceptions2" id="sbp_js_footer_exceptions2" value="<?php echo esc_attr( $js_footer_exceptions2 ); ?>" />
333
+ </p>
334
+
335
+ <p>
336
+ <input type="text" name="sbp_js_footer_exceptions3" id="sbp_js_footer_exceptions3" value="<?php echo esc_attr( $js_footer_exceptions3 ); ?>" />
337
+ </p>
338
+
339
+ <p>
340
+ <input type="text" name="sbp_js_footer_exceptions4" id="sbp_js_footer_exceptions4" value="<?php echo esc_attr( $js_footer_exceptions4 ); ?>" />
341
+ </p>
342
+
343
+ <div class="td-border-last"></div>
344
+
345
+ <p>
346
+ <h4><?php _e( 'As a guidance, here is a list of script handles and script paths of each enqueued script detected by our plugin:', 'sb-pack' ); ?></h4>
347
+ </p>
348
+
349
+ <div class="sbp-all-enqueued">
350
+
351
+ <div class="sbp-div-head">
352
+ <div class="sbp-title-scripts"><?php _e( 'Script Handle', 'sb-pack' ); ?></div>
353
+ <div class="sbp-title-scripts"><?php _e( 'Script Path', 'sb-pack' ); ?></div>
354
+ </div>
355
+
356
+ <div class="sbp-inline-wrap">
357
+
358
+ <div class="sbp-columns1 sbp-width">
359
+ <?php
360
+ $all_script_handles = get_option( 'all_theme_scripts_handle' );
361
+
362
+ $all_script_handles = explode( '<br />', $all_script_handles );
363
+
364
+ foreach ( $all_script_handles as $key => $value ) {
365
+ if ( ! empty( $value ) ) {
366
+ echo '<p>' . esc_html( $value ) . '</p>';
367
+ }
368
+ }
369
+ ?>
370
+ </div>
371
+
372
+ <div class="sbp-columns2 sbp-width">
373
+ <?php
374
+ $all_scripts_src = get_option( 'all_theme_scripts_src' );
375
+
376
+ $all_scripts_src = explode( '<br />', $all_scripts_src );
377
+
378
+ foreach ( $all_scripts_src as $key => $value ) {
379
+ if ( ! empty( $value ) ) {
380
+ $value = parse_url( $value );
381
+ echo '<p>' . esc_html( str_replace( '/wp-content', '', $value['path'] ) ) . '</p>';
382
+ }
383
+
384
+ }
385
+ ?>
386
+ </div>
387
+
388
+ </div>
389
+
390
+ </div>
391
+
392
+ </div><!--/.sbp-inline-wrap-->
393
+
394
+ </div>
395
+ </div>
396
+ </div>
397
+ </div>
398
+
399
+ <div id="postbox-container-defer-scripts" class="postbox-container">
400
+
401
+ <?php if ( isset( $closed_defer ) && $closed_defer == true ) { ?>
402
+ <div class="postbox closed" id="defer-from-footer">
403
+ <?php } else { ?>
404
+ <div class="postbox" id="defer-from-footer">
405
+ <?Php } ?>
406
+
407
+ <button type="button" class="handlediv" aria-expanded="true">
408
+ <span class="screen-reader-text"><?php _e( 'Exclude scripts from being deferred', 'sb-pack' ); ?></span>
409
+ <span class="toggle-indicator" aria-hidden="true"></span>
410
+ </button>
411
+ <h3 class="hndle ui-sortable-handle">
412
+ <span><?php _e( 'Exclude scripts from being deferred', 'sb-pack' ); ?></span>
413
+ </h3>
414
+ <div class="inside">
415
+
416
+ <div class="sbp-inline-wrap">
417
+ <p>
418
+ <input type="text" class="sbp-more-width" name="sbp_defer_exceptions1" id="sbp_defer_exceptions1" value="<?php echo $defer_exceptions1; ?>" />
419
+ </p>
420
+
421
+ <p>
422
+ <input type="text" class="sbp-more-width" name="sbp_defer_exceptions2" id="sbp_defer_exceptions2" value="<?php echo $defer_exceptions2; ?>" />
423
+ </p>
424
+
425
+ <p>
426
+ <input type="text" class="sbp-more-width" name="sbp_defer_exceptions3" id="sbp_defer_exceptions3" value="<?php echo $defer_exceptions3; ?>" />
427
+ </p>
428
+
429
+ <p>
430
+ <input type="text" class="sbp-more-width" name="sbp_defer_exceptions4" id="sbp_defer_exceptions4" value="<?php echo $defer_exceptions4; ?>" />
431
+ </p>
432
+ </div>
433
+ <p class="description">
434
+ <?php _e( 'Enter one by text field, the handle part of the js files that you want to be excluded from defer parsing option. For example: <code>jquery-core</code> If you want to exclude more than 4 scripts, you can use the following filter: <code>sbp_exclude_defer_scripts</code> which takes an array of script handles as params. If you don\'t know how to handle this, feel free to post on our support forums.', 'sb-pack' ); ?>
435
+ </p>
436
+
437
+ </div>
438
+ </div>
439
+ </div>
440
+ </div>
441
+ </div>
442
+
443
+ <div id="image-options" class="sb-pack-tab">
444
+
445
+ <h3><?php _e( 'Change the default image compression level', 'sb-pack' ); ?></h3>
446
+
447
+ <script type='text/javascript'>
448
+ var jpegCompression = '<?php echo $this->image_compression; ?>';
449
+ </script>
450
+
451
+ <p class="sbp-amount">
452
+ <?php _e( 'Compression level:', 'sb-pack' ); ?>
453
+ <input type="text" class="sbp-amount" id="sbp-amount" />
454
+ </p>
455
+
456
+ <p>
457
+ <div class="sbp-slider" id="sbp-slider"></div>
458
+ <input type="hidden" name="sbp_integer" id="sbp_integer" value="<?php echo $this->image_compression; ?>" />
459
+ </p>
460
+
461
+ <p class="description">
462
+ <?php _e( 'The default image compression setting in WordPress is 90%. Compressing your images further than the default will make your file sizes even smaller and will boost your site performance. As a reference, a lower level of compression means more performance but might induce quality loss. We recommend you choose a compression level between 50 and 75.', 'sb-pack' ); ?>
463
+ <br />
464
+ </p>
465
+ <p class="description"><strong>
466
+ <?php _e( 'Note that any changes you make will only affect new images uploaded to your site. A specialized plugin can optimize all your present images and will also optimize new ones as they are added. ', 'sb-pack' ); ?>
467
+ </strong></p>
468
+ <br>
469
+
470
+ </div><!--#image-options-->
471
+ <div id="support" class="sb-pack-tab">
472
+
473
+ <?php
474
+ if ( ! defined( 'WPINC' ) ) {
475
+ die;
476
+ }
477
+ ?>
478
+ <div class="feature-section sbp-support">
479
+ <div class="row two-col center-support">
480
+
481
+ <h3>
482
+ <i class="dashicons dashicons-sos" style="display: inline-block;vertical-align: middle;margin-right: 5px"></i><?php esc_html_e( 'Contact Support', 'sb-pack' ); ?>
483
+ </h3>
484
+ <p>
485
+ <i><?php esc_html_e( 'We offer support through WordPress.org\'s support forums.', 'sb-pack' ); ?></i>
486
+ </p>
487
+ <p>
488
+ <a target="_blank" class="button button-hero button-primary" href="<?php echo esc_url( 'https://wordpress.org/support/plugin/speed-booster-pack#new-post' ); ?>"><?php esc_html_e( 'Post on our support forums', 'sb-pack' ); ?></a>
489
+ </p>
490
+
491
+ </div>
492
+ <div class="row">
493
+ <h2 class="sbp-title">Looking for better WP hosting ?</h2>
494
+ </div>
495
+ <div class="row sbp-blog three-col">
496
+ <div class="col">
497
+ <h3>
498
+ <i class="dashicons dashicons-performance" style="display: inline-block;vertical-align: middle;margin-right: 5px"></i><?php esc_html_e( 'Our Bluehost Hosting Review', 'sb-pack' ); ?>
499
+ </h3>
500
+ <p>
501
+ <i><?php esc_html_e( 'Despite its popularity, though, Bluehost often carries a negative perception among WordPress professionals. So as we dig into this Bluehost review, we\'ll be looking to figure out whether Bluehost\'s performance and features actually justify that reputation.', 'sb-pack' ); ?></i>
502
+ </p>
503
+ <p>
504
+ <a target="_blank" href="<?php echo esc_url( 'https://www.machothemes.com/blog/bluehost-review/?utm_source=sbp&utm_medium=about-page&utm_campaign=blog-links' ); ?>"><?php esc_html_e( 'Read more', 'sb-pack' ); ?></a>
505
+ </p>
506
+ </div><!--/.col-->
507
+
508
+ <div class="col">
509
+ <h3>
510
+ <i class="dashicons dashicons-performance" style="display: inline-block;vertical-align: middle;margin-right: 5px"></i><?php esc_html_e( 'Our InMotion Hosting Review', 'sb-pack' ); ?>
511
+ </h3>
512
+ <p>
513
+ <i><?php esc_html_e( 'InMotion Hosting is a popular independent web host that serves over 300,000 customers. They\'re notably not a part of the EIG behemoth (the parent company behind Bluehost, HostGator, and more), which is a plus in my book.', 'sb-pack' ); ?></i>
514
+ </p>
515
+ <p>
516
+ <a target="_blank" href="<?php echo esc_url( 'https://www.machothemes.com/blog/inmotion-hosting-review/?utm_source=sbp&utm_medium=about-page&utm_campaign=blog-links' ); ?>"><?php esc_html_e( 'Read more', 'sb-pack' ); ?></a>
517
+ </p>
518
+ </div><!--/.col-->
519
+
520
+ <div class="col">
521
+ <h3>
522
+ <i class="dashicons dashicons-performance" style="display: inline-block;vertical-align: middle;margin-right: 5px"></i><?php esc_html_e( 'Our A2 Hosting Review', 'sb-pack' ); ?>
523
+ </h3>
524
+ <p>
525
+ <i><?php esc_html_e( 'When it comes to affordable WordPress hosting, A2 Hosting is a name that often comes up in various WordPress groups for offering quick-loading performance that belies its low price tag.', 'sb-pack' ); ?></i>
526
+ </p>
527
+ <p>
528
+ <a target="_blank" href="<?php echo esc_url( 'https://www.machothemes.com/blog/a2-hosting-review/?utm_source=sbp&utm_medium=about-page&utm_campaign=blog-links' ); ?>"><?php esc_html_e( 'Read more', 'sb-pack' ); ?></a>
529
+ </p>
530
+ </div><!--/.col-->
531
+ </div>
532
+ </div><!--/.feature-section-->
533
+
534
+ <div class="col-fulwidth feedback-box">
535
+ <h3>
536
+ <?php esc_html_e( 'Lend a hand & share your thoughts', 'sb-pack' ); ?>
537
+ <img src="<?php echo $this->plugin_url . "inc/images/handshake.png"; ?>">
538
+ </h3>
539
+ <p>
540
+ <?php
541
+ echo vsprintf( // Translators: 1 is Theme Name, 2 is opening Anchor, 3 is closing.
542
+ __( 'We\'ve been working hard on making %1$s the best one out there. We\'re interested in hearing your thoughts about %1$s and what we could do to <u>make it even better</u>.<br/> <br/> %2$sHave your say%3$s', 'sb-pack' ), array(
543
+ 'Speed Booster Pack',
544
+ '<a class="button button-feedback" target="_blank" href="http://bit.ly/feedback-speed-booster-pack">',
545
+ '</a>',
546
+ ) );
547
+ ?>
548
+ </p>
549
+ </div>
550
+ </div><!--#support-->
551
+
552
+ <div id="optimize-more" class="sb-pack-tab three-col">
553
+
554
+ <div class="col sbp-box">
555
+ <img src="https://ps.w.org/shortpixel-image-optimiser/assets/icon-128x128.png?rev=1038819">
556
+ <div class="sbp-box__name"><?php esc_html_e( 'ShortPixel Image Optimizer', 'sb-pack' ); ?></div>
557
+
558
+ <div class="sbp-box__description">
559
+ <?php esc_html_e( 'Increase your website’s SEO ranking, number of visitors and ultimately your sales by optimizing any image or PDF document on your website. ', 'sb-pack' ); ?>
560
+ </div>
561
+
562
+ <div class="sbp-box__action-bar">
563
+ <span class="sbp-box__action-button">
564
+ <a class="button" href="<?php echo esc_url( 'https://shortpixel.com/h/af/IVAKFSX31472' ); ?>" target="_blank"><?php esc_html_e( 'Test your site for free', 'sb-pack' ); ?></a>
565
+ </span>
566
+ </div>
567
+ </div>
568
+
569
+ </div><!--#optimize-more-->
570
+
571
+ <div class="textright">
572
+ <hr />
573
+ <?php submit_button( '', 'button button-primary button-hero' ); ?>
574
+ </div>
575
+
576
+ </form>
577
+
578
+ </div><!--/.sb-pack-->
579
+ </div> <!-- end wrap div -->
inc/use-google-libraries.php CHANGED
@@ -1,492 +1,504 @@
1
- <?php
2
- /* Use Google Libraries 1.5.2 => Allows your site to use common javascript libraries from Google's AJAX Libraries CDN, rather than from WordPress's own copies. */
3
- /* http://jasonpenney.net/wordpress-plugins/use-google-libraries/ */
4
- /* Author & copyright (c) 2008-2013 : Jason Penney (email : jpenney@jczorkmid.net ). General Public License v.2.0 */
5
-
6
-
7
- if ( ! class_exists( 'SBP_GoogleLibraries' ) ) {
8
-
9
- class SBP_GoogleLibraries {
10
-
11
- protected static $instance;
12
- protected static $plugin_file = __FILE__;
13
- protected static $version = '1.6dev';
14
- protected static $noconflict_inject = "<script type='text/javascript'>try{jQuery.noConflict();}catch(e){};</script>\n";
15
-
16
- public static function get_instance() {
17
- if ( ! isset( self::$instance ) ) {
18
- self::$instance = new SBP_GoogleLibraries();
19
- }
20
- return self::$instance;
21
- }
22
-
23
- /**
24
- * Registry of script replacement rules
25
- *
26
- * Entries are formatted as follows:
27
- * <code>
28
- * 'script-handle' => array(
29
- * 'google-lib-path',
30
- * 'google-file-name',
31
- * 'google-combined-into')
32
- * </code>
33
- *
34
- * - 'script-handle' -- the handle used by WordPress script
35
- * registration
36
- * - 'google-lib-path' -- path to location on Google CDN( empty
37
- * string if script has been combined).
38
- * - 'google-file-name' -- file name (minus .js) on Google CDN (empty
39
- * string if script has been combined).
40
- * - 'google-combined-into' -- If not empty string, then the given
41
- * handle has been combined into a file loaded by this handle.
42
- *
43
- * @var array
44
- */
45
- protected $google_scripts;
46
-
47
- /**
48
- * Used internally to ensure jQuery.noconflict is executed as close to
49
- * how core WordPress would.
50
- *
51
- * @var bool
52
- */
53
- protected $noconflict_next;
54
-
55
- /**
56
- * script id used for actual jquery script
57
- *
58
- * @var string
59
- *
60
- * @since 5.2
61
- */
62
- protected $jquery_tag;
63
-
64
- /**
65
- * True if using a version of WordPress that allows
66
- * `wp_register_script` to take protocol-relative URLs,
67
- * otherwise False
68
- *
69
- * @since 1.5.2
70
- *
71
- * @var bool
72
- */
73
- protected $protocol_relative_supported;
74
-
75
- /**
76
- * transient name used when caching
77
- *
78
- * @var string
79
- */
80
- protected static $cache_id = 'SBP_GoogleLibraries_cache';
81
-
82
- /**
83
- * transient expiration
84
- *
85
- * @var int
86
- */
87
- protected static $cache_len = 90000; // 25 hours
88
-
89
- /**
90
- * Message displayed and logged when a WP_Scripts has been created
91
- * before it's time
92
- *
93
- * @var str
94
- */
95
- protected static $script_before_init_notice =
96
- 'Another plugin has registered or enqued a script before the "init" action. Attempting to work around it.';
97
-
98
- /**
99
- * Registry of scripts available from Google Libraries. Any extra
100
- * scripts listed here not provided by WordPress or another plugin
101
- * will not be registered. This list is just used to chancge where
102
- * things load from.
103
- *
104
- * Entries are in the format:
105
- * <code>
106
- * 'script-handle' => array(
107
- * 'google-lib-path',
108
- * 'google-file-name',
109
- * 'google-combined-into'
110
- * )
111
- * </code>
112
- *
113
- * @var array
114
- */
115
- protected static $default_google_scripts = array(
116
- /* jQuery */
117
- 'jquery' => array( 'jquery', 'jquery.min', '' ),
118
-
119
- /* jQuery UI */
120
- 'jquery-ui-core' => array( 'jqueryui', 'jquery-ui.min', '' ),
121
- 'jquery-ui-accordion' => array( '', '', 'jquery-ui-core' ),
122
- 'jquery-ui-autocomplete' => array( '', '', 'jquery-ui-core' ), /* jQueri UI 1.8 */
123
- 'jquery-ui-button' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
124
- 'jquery-ui-datepicker' => array( '', '', 'jquery-ui-core' ),
125
- 'jquery-ui-dialog' => array( '', '', 'jquery-ui-core' ),
126
- 'jquery-ui-draggable' => array( '', '', 'jquery-ui-core' ),
127
- 'jquery-ui-droppable' => array( '', '', 'jquery-ui-core' ),
128
- 'jquery-ui-menu' => array( '', '', 'jquery-ui-core' ),
129
- 'jquery-ui-mouse' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
130
- 'jquery-ui-position' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
131
- 'jquery-ui-progressbar' => array( '', '', 'jquery-ui-core' ),
132
- 'jquery-ui-resizable' => array( '', '', 'jquery-ui-core' ),
133
- 'jquery-ui-selectable' => array( '', '', 'jquery-ui-core' ),
134
- 'jquery-ui-slider' => array( '', '', 'jquery-ui-core' ),
135
- 'jquery-ui-sortable' => array( '', '', 'jquery-ui-core' ),
136
- 'jquery-ui-tabs' => array( '', '', 'jquery-ui-core' ),
137
- 'jquery-ui-widget' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
138
-
139
- /* jQuery Effects */
140
- 'jquery-effects-core' => array( '', '', 'jquery-ui-core' ),
141
- 'jquery-effects-blind' => array( '', '', 'jquery-ui-core' ),
142
- 'jquery-effects-bounce' => array( '', '', 'jquery-ui-core' ),
143
- 'jquery-effects-clip' => array( '', '', 'jquery-ui-core' ),
144
- 'jquery-effects-drop' => array( '', '', 'jquery-ui-core' ),
145
- 'jquery-effects-explode' => array( '', '', 'jquery-ui-core' ),
146
- 'jquery-effects-fade' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
147
- 'jquery-effects-fold' => array( '', '', 'jquery-ui-core' ),
148
- 'jquery-effects-highlight' => array( '', '', 'jquery-ui-core' ),
149
- 'jquery-effects-pulsate' => array( '', '', 'jquery-ui-core' ),
150
- 'jquery-effects-scale' => array( '', '', 'jquery-ui-core' ),
151
- 'jquery-effects-shake' => array( '', '', 'jquery-ui-core' ),
152
- 'jquery-effects-slide' => array( '', '', 'jquery-ui-core' ),
153
- 'jquery-effects-transfer' => array( '', '', 'jquery-ui-core' ),
154
-
155
- /* prototype */
156
- 'prototype' => array( 'prototype', 'prototype', '' ),
157
-
158
- /* scriptaculous */
159
- 'scriptaculous-root' => array( 'scriptaculous', 'scriptaculous', '' ),
160
- 'scriptaculous-builder' => array( '', '', 'scriptaculous-root' ),
161
- 'scriptaculous-effects' => array( '', '', 'scriptaculous-root' ),
162
- 'scriptaculous-dragdrop' => array( '', '', 'scriptaculous-root' ),
163
- 'scriptaculous-controls' => array( '', '', 'scriptaculous-root' ),
164
- 'scriptaculous-slider' => array( '', '', 'scriptaculous-root' ),
165
- 'scriptaculous-sound' => array( '', '', 'scriptaculous-root' ),
166
-
167
- /* moo tools */
168
- 'mootools' => array( 'mootools', 'mootools-yui-compressed', '' ),
169
-
170
- /* Dojo */
171
- 'dojo' => array( 'dojo', 'dojo.xd', '' ),
172
-
173
- /* swfobject */
174
- 'swfobject' => array( 'swfobject', 'swfobject', '' ),
175
-
176
- /* YUI */
177
- 'yui' => array( 'yui', 'build/yuiloader/yuiloader-min', '' ),
178
-
179
- /* Ext Core */
180
- 'ext-core' => array( 'ext-core', 'ext-core', '' )
181
-
182
- );
183
-
184
- /**
185
- * PHP 5 Constructor
186
- */
187
- function __construct() {
188
- $this->jquery_tag = 'jquery';
189
- $this->google_scripts = self::$default_google_scripts;
190
-
191
- $this->noconflict_next = FALSE;
192
- // protocol-relative URLS accepted by `wp_register_scripts`
193
- // starting with version 3.5
194
- $this->protocol_relative_supported = version_compare(
195
- get_bloginfo( 'version' ), '3.5', '>='
196
- );
197
- }
198
-
199
- static function configure_plugin() {
200
- add_action(
201
- 'wp_default_scripts',
202
- array(
203
- 'SBP_GoogleLibraries',
204
- 'replace_default_scripts_action',
205
- ),
206
- 1000
207
- );
208
- add_filter(
209
- 'script_loader_src',
210
- array( 'SBP_GoogleLibraries', 'remove_ver_query_filter' ),
211
- 1000
212
- );
213
- add_filter(
214
- 'init',
215
- array( 'SBP_GoogleLibraries', 'setup_filter' )
216
- );
217
-
218
- // There's a chance some plugin has called wp_enqueue_script
219
- // outside of any hooks, which means that this plugin's
220
- // 'wp_default_scripts' hook will never get a chance to fire.
221
- // This tries to work around that.
222
- global $wp_scripts;
223
- if ( is_a( $wp_scripts, 'WP_Scripts' ) ) {
224
- self::debug( self::$script_before_init_notice );
225
- $ugl = self::get_instance();
226
- $ugl->replace_default_scripts( $wp_scripts );
227
- }
228
- }
229
-
230
- /**
231
- * Get markup to show error message in admin when $WP_Script
232
- * created before it's time
233
- *
234
- * @returns string markup for notice display
235
- */
236
- static function script_before_init_admin_notice() {
237
- echo '<div class="error fade"><p>Use Google Libraries: ' .
238
- self::$script_before_init_notice . '</p></div>';
239
- }
240
-
241
- static function setup_filter() {
242
- $ugl = self::get_instance();
243
- $ugl->setup();
244
- }
245
-
246
- /**
247
- * Log message if `WP_DEBUG` enabled.
248
- *
249
- * @since 1.5
250
- *
251
- * @param mixed $message string to log, or object to log via `print_r`
252
- */
253
- static function debug( $message ) {
254
- if ( WP_DEBUG !== false ) {
255
- if ( is_array( $message ) || is_object( $message ) ) {
256
- $message = var_export( $message, true );
257
- }
258
- error_log( 'Use Google Libraries: ' . $message );
259
- }
260
- }
261
-
262
- /**
263
- * Disables script concatination, which breaks when dependencies are not
264
- * all loaded locally.
265
- */
266
- function setup() {
267
- global $concatenate_scripts;
268
- $concatenate_scripts = false;
269
-
270
- }
271
-
272
- static function replace_default_scripts_action( &$scripts ) {
273
- $ugl = self::get_instance();
274
- $ugl->replace_default_scripts( $scripts );
275
- }
276
-
277
- /**
278
- * Sometimes WordPress registes `jquery.js` as `'jquery-core'`, while
279
- * '`jquery`' is some other script with a dependency on
280
- * `'jquery-core'`. If '`jquery-core`' in present in `$scripts`
281
- * this is assumed to be the case and update the registration for
282
- * '`jquery-core`' instead.
283
- *
284
- * @since 1.6
285
- *
286
- * @param object $scripts
287
- */
288
- protected function newscripts_fix_jquery_core( &$scripts ) {
289
- // jquery may really be loaded under jquery-core
290
- // if so, we'll adjust google_scripts here
291
- if ( $scripts->query( 'jquery-core' ) && array_key_exists( 'jquery', $this->google_scripts ) ) {
292
- $this->google_scripts['jquery-core'] = $this->google_scripts['jquery'];
293
- unset( $this->google_scripts['jquery'] );
294
- $this->jquery_tag = 'jquery-core';
295
- }
296
- }
297
-
298
- protected function newscripts_build_url( $name, $lib, $ver, $js, $orig_url ) {
299
-
300
- // if $lib is empty, then this script does not need to be
301
- // exlicitly loaded when using googleapis.com, but we need to keep
302
- // it around for dependencies
303
- if ( $lib != '' ) {
304
- // build new URL
305
- $url = "//ajax.googleapis.com/ajax/libs/$lib/$ver/$js.js";
306
- $head = wp_remote_head( "http:$url" );
307
- if ( wp_remote_retrieve_response_code( $head ) !== 200 ) {
308
- self::debug( "Google servers do not seem to be hosting requested version of $name (version $ver). Using version provided by WordPress." );
309
- return $orig_url;
310
- }
311
- if ( ! $this->protocol_relative_supported ) {
312
- return "http:$url";
313
- }
314
- return $url;
315
- } else {
316
- return '';
317
- }
318
- }
319
-
320
- /**
321
- * Collects replacement script registration data.
322
- *
323
- * Processes standard WordPress script registrations against list of
324
- * scripts hosted on Google's CDN. Will exclude any scripts that
325
- * contain '-' in the version number (used by WordPress devs to signify
326
- * a non-standard version). Also, the new url will be queried to ensure
327
- * it's valid (via `wp_remote_head`).
328
- *
329
- * @since 1.5
330
- *
331
- * @param object $scripts WP_Scripts object
332
- * @return array updated script registration data
333
- */
334
- function build_newscripts( &$scripts ) {
335
- $newscripts = array();
336
- $combine_ok = array();
337
-
338
- $this->newscripts_fix_jquery_core( $scripts );
339
-
340
- foreach ( $this->google_scripts as $name => $values ) {
341
- if ( $script = $scripts->query( $name ) ) {
342
- $lib = $values[0];
343
- $js = $values[1];
344
- $combined = $values[2];
345
- // default to requested ver
346
- $ver = $script->ver;
347
-
348
- if ( strpos( $ver, '-' ) !== false ) {
349
- self::debug( "WordPress appears to be requesting a non-standard version of $name (version $ver). Using version provided by WordPress to ensure compatability." );
350
- continue;
351
- }
352
-
353
- // TODO: replace with more flexible option
354
- // quick and dirty work around for scriptaculous 1.8.0
355
- if ( $name == 'scriptaculous-root' && $ver == '1.8.0' ) {
356
- $ver = '1.8';
357
- }
358
-
359
- if ( $combined !== '' ) {
360
- if ( ! in_array( $combined, $combine_ok ) ) {
361
- self::debug( "Google servers not hosting combined library for $name (version $ver). Using version provided by WordPress to ensure compatability." );
362
- continue;
363
- }
364
- if ( ! in_array( $combined, $script->deps ) ) {
365
- // if this script has been combined into another script
366
- // ensure this handle depends on the combined handle
367
- $script->deps[] = $combined;
368
- }
369
- }
370
-
371
- $script->src = $this->newscripts_build_url(
372
- $name, $lib, $ver, $js, $script->src
373
- );
374
-
375
- $newscripts[] = $script;
376
- $combine_ok[] = $name;
377
- }
378
- }
379
- return $newscripts;
380
-
381
- }
382
-
383
-
384
- /**
385
- * Get new script registration data.
386
- *
387
- * Attempts to load script registration data from the transient cache.
388
- * If not in cache, or if cached data is from a different version of
389
- * either WordPress or this plug-in, then it will be rebuilt. Also
390
- * handles forcing URLS to use SSL if site is currently loaded over
391
- * SSL.
392
- *
393
- * @since 1.5
394
- *
395
- * @param object $scripts WP_Scripts object
396
- * @return array updated script registration data
397
- */
398
- function get_newscripts( &$scripts ) {
399
- $wp_ver = get_bloginfo( 'version' );
400
- if ( false === ( $cache = get_transient( self::$cache_id ) ) ) {
401
- $cache = array();
402
- }
403
- if ( ( ! isset( $cache['ugl_ver'] ) ) || ( $cache['ugl_ver'] !== self::$version ) ||
404
- ( ! isset( $cache['wp_ver'] ) ) || ( $cache['wp_ver'] !== $wp_ver ) ||
405
- ( ! isset( $cache['newscripts'] ) ) ) {
406
- $newscripts = $this->build_newscripts( $scripts );
407
- $cache = array(
408
- 'ugl_ver' => self::$version,
409
- 'wp_ver' => $wp_ver,
410
- 'newscripts' => $newscripts,
411
- );
412
- set_transient( self::$cache_id, $cache, self::$cache_len );
413
- } else {
414
- $newscripts = $cache['newscripts'];
415
- }
416
- // need to handle ssl after cache load, because it may swap
417
- // back and forth depending on the site config/usage
418
- if ( ( ! $this->protocol_relative_supported ) && ( is_ssl() ) ) {
419
- foreach ( $newscripts as $script ) {
420
- $script->src = preg_replace( '/^http:/', 'https:', $script->src );
421
- }
422
- }
423
- return $newscripts;
424
- }
425
-
426
- /**
427
- * Replace as many of the WordPress default script registrations as
428
- * possible with ones from Google
429
- *
430
- * @param object $scripts WP_Scripts object.
431
- */
432
- function replace_default_scripts( &$scripts ) {
433
- $newscripts = $this->get_newscripts( $scripts );
434
- foreach ( $newscripts as $script ) {
435
- $olddata = $this->wp_dependency_get_data( $scripts, $script->handle );
436
- $scripts->remove( $script->handle );
437
- // re-register with original ver
438
- $scripts->add( $script->handle, $script->src, $script->deps, $script->ver );
439
- if ( $olddata ) {
440
- foreach ( $olddata as $data_name => $data ) {
441
- $scripts->add_data( $script->handle, $data_name, $data );
442
- }
443
- }
444
- }
445
- }
446
-
447
-
448
- function wp_dependency_get_data( $dep_obj, $handle, $data_name = false ) {
449
-
450
- if ( ! method_exists( $dep_obj, 'add_data' ) )
451
- return false;
452
-
453
- if ( ! isset( $dep_obj->registered[$handle] ) )
454
- return false;
455
-
456
- if ( ! $data_name )
457
- return $dep_obj->registered[$handle]->extra;
458
-
459
- if ( ! method_exists( $dep_obj, 'get_data' ) )
460
- return $dep_obj->registered[$handle]->extra[$data_name];
461
-
462
- return $dep_obj->get_data( $handle, $data_name );
463
- }
464
-
465
-
466
- /**
467
- * Remove 'ver' from query string for scripts loaded from Google's
468
- * CDN
469
- *
470
- * @param string $src src attribute of script tag
471
- * @return string Updated src attribute
472
- */
473
- function remove_ver_query( $src ) {
474
- if ( $this->noconflict_next ) {
475
- $this->noconflict_next = FALSE;
476
- echo self::$noconflict_inject; // xss ok
477
- }
478
- if ( preg_match( '/ajax\.googleapis\.com\//', $src ) ) {
479
- $src = remove_query_arg( 'ver', $src );
480
- if ( strpos( $src, $this->google_scripts[$this->jquery_tag][1] . '.js' ) ) {
481
- $this->noconflict_next = TRUE;
482
- }
483
- }
484
- return $src;
485
- }
486
-
487
- static function remove_ver_query_filter( $src ) {
488
- $ugl = self::get_instance();
489
- return $ugl->remove_ver_query( $src );
490
- }
491
- }
492
- }
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'JCP_UseGoogleLibraries' ) ) {
4
+
5
+ class JCP_UseGoogleLibraries {
6
+
7
+ protected static $instance;
8
+ protected static $plugin_file = __FILE__;
9
+ protected static $version = '1.6.2.3';
10
+ protected static $noconflict_inject = "<script type='text/javascript'>try{jQuery.noConflict();}catch(e){};</script>\n";
11
+
12
+ public static function get_instance() {
13
+ if ( ! isset( self::$instance ) ) {
14
+ self::$instance = new JCP_UseGoogleLibraries();
15
+ }
16
+ return self::$instance;
17
+ }
18
+
19
+ /**
20
+ * Registry of script replacement rules
21
+ *
22
+ * Entries are formatted as follows:
23
+ * <code>
24
+ * 'script-handle' => array(
25
+ * 'google-lib-path',
26
+ * 'google-file-name',
27
+ * 'google-combined-into')
28
+ * </code>
29
+ *
30
+ * - 'script-handle' -- the handle used by WordPress script
31
+ * registration
32
+ * - 'google-lib-path' -- path to location on Google CDN( empty
33
+ * string if script has been combined).
34
+ * - 'google-file-name' -- file name (minus .js) on Google CDN (empty
35
+ * string if script has been combined).
36
+ * - 'google-combined-into' -- If not empty string, then the given
37
+ * handle has been combined into a file loaded by this handle.
38
+ *
39
+ * @var array
40
+ */
41
+ protected $google_scripts;
42
+
43
+ /**
44
+ * Used internally to ensure jQuery.noconflict is executed as close to
45
+ * how core WordPress would.
46
+ *
47
+ * @var bool
48
+ */
49
+ protected $noconflict_next;
50
+
51
+ /**
52
+ * script id used for actual jquery script
53
+ *
54
+ * @var string
55
+ *
56
+ * @since 5.2
57
+ */
58
+ protected $jquery_tag;
59
+
60
+ /**
61
+ * True if using a version of WordPress that allows
62
+ * `wp_register_script` to take protocol-relative URLs,
63
+ * otherwise False
64
+ *
65
+ * @since 1.5.2
66
+ *
67
+ * @var bool
68
+ */
69
+ protected $protocol_relative_supported;
70
+
71
+ /**
72
+ * transient name used when caching
73
+ *
74
+ * @var string
75
+ */
76
+ protected static $cache_id = 'JCP_UseGoogleLibraries_cache';
77
+
78
+ /**
79
+ * transient expiration
80
+ *
81
+ * @var int
82
+ */
83
+ protected static $cache_len = 90000; // 25 hours
84
+
85
+ /**
86
+ * Message displayed and logged when a WP_Scripts has been created
87
+ * before it's time
88
+ *
89
+ * @var str
90
+ */
91
+ protected static $script_before_init_notice =
92
+ 'Another plugin has registered or enqued a script before the "init" action. Attempting to work around it.';
93
+
94
+ /**
95
+ * Registry of scripts available from Google Libraries. Any extra
96
+ * scripts listed here not provided by WordPress or another plugin
97
+ * will not be registered. This list is just used to chancge where
98
+ * things load from.
99
+ *
100
+ * Entries are in the format:
101
+ * <code>
102
+ * 'script-handle' => array(
103
+ * 'google-lib-path',
104
+ * 'google-file-name',
105
+ * 'google-combined-into'
106
+ * )
107
+ * </code>
108
+ *
109
+ * @var array
110
+ */
111
+ protected static $default_google_scripts = array(
112
+ /* jQuery */
113
+ 'jquery' => array( 'jquery', 'jquery.min', '' ),
114
+
115
+ /* jQuery UI */
116
+ 'jquery-ui-core' => array( 'jqueryui', 'jquery-ui.min', '' ),
117
+ 'jquery-ui-accordion' => array( '', '', 'jquery-ui-core' ),
118
+ 'jquery-ui-autocomplete' => array( '', '', 'jquery-ui-core' ), /* jQueri UI 1.8 */
119
+ 'jquery-ui-button' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
120
+ 'jquery-ui-datepicker' => array( '', '', 'jquery-ui-core' ),
121
+ 'jquery-ui-dialog' => array( '', '', 'jquery-ui-core' ),
122
+ 'jquery-ui-draggable' => array( '', '', 'jquery-ui-core' ),
123
+ 'jquery-ui-droppable' => array( '', '', 'jquery-ui-core' ),
124
+ 'jquery-ui-menu' => array( '', '', 'jquery-ui-core' ),
125
+ 'jquery-ui-mouse' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
126
+ 'jquery-ui-position' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
127
+ 'jquery-ui-progressbar' => array( '', '', 'jquery-ui-core' ),
128
+ 'jquery-ui-resizable' => array( '', '', 'jquery-ui-core' ),
129
+ 'jquery-ui-selectable' => array( '', '', 'jquery-ui-core' ),
130
+ 'jquery-ui-selectmenu' => array( '', '', 'jquery-ui-core' ),/* jQuery UI 1.11 */
131
+ 'jquery-ui-slider' => array( '', '', 'jquery-ui-core' ),
132
+ 'jquery-ui-sortable' => array( '', '', 'jquery-ui-core' ),
133
+ 'jquery-ui-spinner' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.11 */
134
+ 'jquery-ui-tabs' => array( '', '', 'jquery-ui-core' ),
135
+ 'jquery-ui-tooltip' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.11 */
136
+ 'jquery-ui-widget' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
137
+
138
+ /* jQuery Effects */
139
+ 'jquery-effects-core' => array( '', '', 'jquery-ui-core' ),
140
+ 'jquery-effects-blind' => array( '', '', 'jquery-ui-core' ),
141
+ 'jquery-effects-bounce' => array( '', '', 'jquery-ui-core' ),
142
+ 'jquery-effects-clip' => array( '', '', 'jquery-ui-core' ),
143
+ 'jquery-effects-drop' => array( '', '', 'jquery-ui-core' ),
144
+ 'jquery-effects-explode' => array( '', '', 'jquery-ui-core' ),
145
+ 'jquery-effects-fade' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
146
+ 'jquery-effects-fold' => array( '', '', 'jquery-ui-core' ),
147
+ 'jquery-effects-highlight' => array( '', '', 'jquery-ui-core' ),
148
+ 'jquery-effects-puff' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.11 */
149
+ 'jquery-effects-pulsate' => array( '', '', 'jquery-ui-core' ),
150
+ 'jquery-effects-scale' => array( '', '', 'jquery-ui-core' ),
151
+ 'jquery-effects-shake' => array( '', '', 'jquery-ui-core' ),
152
+ 'jquery-effects-size' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.11 */
153
+ 'jquery-effects-slide' => array( '', '', 'jquery-ui-core' ),
154
+ 'jquery-effects-transfer' => array( '', '', 'jquery-ui-core' ),
155
+
156
+ /* prototype */
157
+ 'prototype' => array( 'prototype', 'prototype', '' ),
158
+
159
+ /* scriptaculous */
160
+ 'scriptaculous-root' => array( 'scriptaculous', 'scriptaculous', '' ),
161
+ 'scriptaculous-builder' => array( '', '', 'scriptaculous-root' ),
162
+ 'scriptaculous-effects' => array( '', '', 'scriptaculous-root' ),
163
+ 'scriptaculous-dragdrop' => array( '', '', 'scriptaculous-root' ),
164
+ 'scriptaculous-controls' => array( '', '', 'scriptaculous-root' ),
165
+ 'scriptaculous-slider' => array( '', '', 'scriptaculous-root' ),
166
+ 'scriptaculous-sound' => array( '', '', 'scriptaculous-root' ),
167
+
168
+ /* moo tools */
169
+ 'mootools' => array( 'mootools', 'mootools-yui-compressed', '' ),
170
+
171
+ /* Dojo */
172
+ 'dojo' => array( 'dojo', 'dojo.xd', '' ),
173
+
174
+ /* swfobject */
175
+ 'swfobject' => array( 'swfobject', 'swfobject', '' ),
176
+
177
+ /* YUI */
178
+ 'yui' => array( 'yui', 'build/yuiloader/yuiloader-min', '' ),
179
+
180
+ /* Ext Core */
181
+ 'ext-core' => array( 'ext-core', 'ext-core', '' )
182
+
183
+ );
184
+
185
+ /**
186
+ * PHP 5 Constructor
187
+ */
188
+ function __construct() {
189
+ $this->jquery_tag = 'jquery';
190
+ $this->google_scripts = self::$default_google_scripts;
191
+
192
+ $this->noconflict_next = false;
193
+ // protocol-relative URLS accepted by `wp_register_scripts`
194
+ // starting with version 3.5
195
+ $this->protocol_relative_supported = version_compare(
196
+ get_bloginfo( 'version' ), '3.5', '>='
197
+ );
198
+ }
199
+
200
+ static function configure_plugin() {
201
+
202
+ add_action(
203
+ 'wp_default_scripts',
204
+ array(
205
+ 'JCP_UseGoogleLibraries',
206
+ 'replace_default_scripts_action',
207
+ ),
208
+ 1000
209
+ );
210
+ add_filter(
211
+ 'script_loader_src',
212
+ array( 'JCP_UseGoogleLibraries', 'remove_ver_query_filter' ),
213
+ 1000
214
+ );
215
+ add_filter(
216
+ 'init',
217
+ array( 'JCP_UseGoogleLibraries', 'setup_filter' )
218
+ );
219
+
220
+ // There's a chance some plugin has called wp_enqueue_script
221
+ // outside of any hooks, which means that this plugin's
222
+ // 'wp_default_scripts' hook will never get a chance to fire.
223
+ // This tries to work around that.
224
+ global $wp_scripts;
225
+ if ( is_a( $wp_scripts, 'WP_Scripts' ) ) {
226
+ self::debug( self::$script_before_init_notice );
227
+ $ugl = self::get_instance();
228
+ $ugl->replace_default_scripts( $wp_scripts );
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Get markup to show error message in admin when $WP_Script
234
+ * created before it's time
235
+ *
236
+ * @returns string markup for notice display
237
+ */
238
+ static function script_before_init_admin_notice() {
239
+ echo '<div class="error fade"><p>Use Google Libraries: ' .
240
+ self::$script_before_init_notice . '</p></div>';
241
+ }
242
+
243
+ static function setup_filter() {
244
+ $ugl = self::get_instance();
245
+ $ugl->setup();
246
+ }
247
+
248
+ /**
249
+ * Log message if `WP_DEBUG` enabled.
250
+ *
251
+ * @since 1.5
252
+ *
253
+ * @param mixed $message string to log, or object to log via `print_r`
254
+ */
255
+ static function debug( $message ) {
256
+ if ( WP_DEBUG !== false ) {
257
+ if ( is_array( $message ) || is_object( $message ) ) {
258
+ $message = var_export( $message, true );
259
+ }
260
+ error_log( 'Use Google Libraries: ' . $message );
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Disables script concatination, which breaks when dependencies are not
266
+ * all loaded locally.
267
+ */
268
+ function setup() {
269
+ global $concatenate_scripts;
270
+ $concatenate_scripts = false;
271
+
272
+ }
273
+
274
+ static function replace_default_scripts_action( &$scripts ) {
275
+ $ugl = self::get_instance();
276
+ $ugl->replace_default_scripts( $scripts );
277
+ }
278
+
279
+ /**
280
+ * Sometimes WordPress registes `jquery.js` as `'jquery-core'`, while
281
+ * '`jquery`' is some other script with a dependency on
282
+ * `'jquery-core'`. If '`jquery-core`' in present in `$scripts`
283
+ * this is assumed to be the case and update the registration for
284
+ * '`jquery-core`' instead.
285
+ *
286
+ * @since 1.6
287
+ *
288
+ * @param object $scripts
289
+ */
290
+ protected function newscripts_fix_jquery_core( &$scripts ) {
291
+ // jquery may really be loaded under jquery-core
292
+ // if so, we'll adjust google_scripts here
293
+ if ( $scripts->query( 'jquery-core' ) && array_key_exists( 'jquery', $this->google_scripts ) ) {
294
+ $this->google_scripts['jquery-core'] = $this->google_scripts['jquery'];
295
+ unset( $this->google_scripts['jquery'] );
296
+ $this->jquery_tag = 'jquery-core';
297
+ }
298
+ }
299
+
300
+ protected function newscripts_build_url( $name, $lib, $ver, $js, $orig_url ) {
301
+
302
+ // if $lib is empty, then this script does not need to be
303
+ // exlicitly loaded when using googleapis.com, but we need to keep
304
+ // it around for dependencies
305
+ if ( $lib != '' ) {
306
+ // build new URL
307
+ $url = "//ajax.googleapis.com/ajax/libs/$lib/$ver/$js.js";
308
+ $proto_url = "http:$url";
309
+ $head = wp_remote_head( $proto_url );
310
+ if ( wp_remote_retrieve_response_code( $head ) !== 200 ) {
311
+ self::debug( "Google servers do not seem to be hosting requested version of $name (version $ver). Using version provided by WordPress." );
312
+ return $orig_url;
313
+ }
314
+ if ( ! $this->protocol_relative_supported ) {
315
+ return $proto_url;
316
+ }
317
+ return $url;
318
+ } else {
319
+ return '';
320
+ }
321
+ }
322
+
323
+ /**
324
+ * Collects replacement script registration data.
325
+ *
326
+ * Processes standard WordPress script registrations against list of
327
+ * scripts hosted on Google's CDN. Will exclude any scripts that
328
+ * contain '-' in the version number (used by WordPress devs to signify
329
+ * a non-standard version). Also, the new url will be queried to ensure
330
+ * it's valid (via `wp_remote_head`).
331
+ *
332
+ * @since 1.5
333
+ *
334
+ * @param object $scripts WP_Scripts object
335
+ * @return array updated script registration data
336
+ */
337
+ function build_newscripts( &$scripts ) {
338
+ $newscripts = array();
339
+ $combine_ok = array();
340
+
341
+ $this->newscripts_fix_jquery_core( $scripts );
342
+
343
+ foreach ( $this->google_scripts as $name => $values ) {
344
+ if ( $script = $scripts->query( $name ) ) {
345
+ $lib = $values[0];
346
+ $js = $values[1];
347
+ $combined = $values[2];
348
+ // default to requested ver
349
+ $ver = $script->ver;
350
+
351
+ if ( strpos( $ver, '-' ) !== false ) {
352
+ self::debug( "WordPress appears to be requesting a non-standard version of $name (version $ver). Using version provided by WordPress to ensure compatability." );
353
+ continue;
354
+ }
355
+
356
+ // TODO: replace with more flexible option
357
+ // quick and dirty work around for scriptaculous 1.8.0
358
+ if ( $name == 'scriptaculous-root' && $ver == '1.8.0' ) {
359
+ $ver = '1.8';
360
+ }
361
+
362
+ if ( $combined !== '' ) {
363
+ if ( ! in_array( $combined, $combine_ok ) ) {
364
+ self::debug( "Google servers not hosting combined library for $name (version $ver). Using version provided by WordPress to ensure compatability." );
365
+ continue;
366
+ }
367
+ if ( ! in_array( $combined, $script->deps ) ) {
368
+ // if this script has been combined into another script
369
+ // ensure this handle depends on the combined handle
370
+ $script->deps[] = $combined;
371
+ }
372
+ }
373
+
374
+ $script->src = $this->newscripts_build_url(
375
+ $name, $lib, $ver, $js, $script->src
376
+ );
377
+
378
+ $newscripts[] = $script;
379
+ $combine_ok[] = $name;
380
+ }
381
+ }
382
+ return $newscripts;
383
+
384
+ }
385
+
386
+
387
+ /**
388
+ * Get new script registration data.
389
+ *
390
+ * Attempts to load script registration data from the transient cache.
391
+ * If not in cache, or if cached data is from a different version of
392
+ * either WordPress or this plug-in, then it will be rebuilt. Also
393
+ * handles forcing URLS to use SSL if site is currently loaded over
394
+ * SSL.
395
+ *
396
+ * @since 1.5
397
+ *
398
+ * @param object $scripts WP_Scripts object
399
+ * @return array updated script registration data
400
+ */
401
+ function get_newscripts( &$scripts ) {
402
+ $wp_ver = get_bloginfo( 'version' );
403
+ if ( false === ( $cache = get_transient( self::$cache_id ) ) ) {
404
+ $cache = array();
405
+ }
406
+ if ( ( ! isset( $cache['ugl_ver'] ) ) || ( $cache['ugl_ver'] !== self::$version ) ||
407
+ ( ! isset( $cache['wp_ver'] ) ) || ( $cache['wp_ver'] !== $wp_ver ) ||
408
+ ( ! isset( $cache['newscripts'] ) ) ) {
409
+ $newscripts = $this->build_newscripts( $scripts );
410
+ $cache = array(
411
+ 'ugl_ver' => self::$version,
412
+ 'wp_ver' => $wp_ver,
413
+ 'newscripts' => $newscripts,
414
+ );
415
+ set_transient( self::$cache_id, $cache, self::$cache_len );
416
+ } else {
417
+ $newscripts = $cache['newscripts'];
418
+ }
419
+ // need to handle ssl after cache load, because it may swap
420
+ // back and forth depending on the site config/usage
421
+ if ( ( ! $this->protocol_relative_supported ) && ( is_ssl() ) ) {
422
+ foreach ( $newscripts as $script ) {
423
+ $script->src = preg_replace( '/^http:/', 'https:', $script->src );
424
+ }
425
+ }
426
+ return $newscripts;
427
+ }
428
+
429
+ /**
430
+ * Replace as many of the WordPress default script registrations as
431
+ * possible with ones from Google
432
+ *
433
+ * @param object $scripts WP_Scripts object.
434
+ */
435
+ function replace_default_scripts( &$scripts ) {
436
+ $newscripts = $this->get_newscripts( $scripts );
437
+ foreach ( $newscripts as $script ) {
438
+ $olddata = $this->wp_dependency_get_data( $scripts, $script->handle );
439
+ $scripts->remove( $script->handle );
440
+ // re-register with original ver
441
+ $scripts->add( $script->handle, $script->src, $script->deps, $script->ver );
442
+ if ( $olddata ) {
443
+ foreach ( $olddata as $data_name => $data ) {
444
+ $scripts->add_data( $script->handle, $data_name, $data );
445
+ }
446
+ }
447
+ }
448
+ }
449
+
450
+
451
+ function wp_dependency_get_data( $dep_obj, $handle, $data_name = false ) {
452
+
453
+ if ( ! method_exists( $dep_obj, 'add_data' ) ) {
454
+ return false;
455
+ }
456
+
457
+ if ( ! isset( $dep_obj->registered[ $handle ] ) ) {
458
+ return false;
459
+ }
460
+
461
+ if ( ! $data_name ) {
462
+ return $dep_obj->registered[ $handle ]->extra;
463
+ }
464
+
465
+ if ( ! method_exists( $dep_obj, 'get_data' ) ) {
466
+ return $dep_obj->registered[ $handle ]->extra[ $data_name ];
467
+ }
468
+
469
+ return $dep_obj->get_data( $handle, $data_name );
470
+ }
471
+
472
+
473
+ /**
474
+ * Remove 'ver' from query string for scripts loaded from Google's
475
+ * CDN
476
+ *
477
+ * @param string $src src attribute of script tag
478
+ * @return string Updated src attribute
479
+ */
480
+ function remove_ver_query( $src ) {
481
+ if ( $this->noconflict_next ) {
482
+ $this->noconflict_next = false;
483
+ echo self::$noconflict_inject; // xss ok
484
+ }
485
+ if ( preg_match( '/ajax\.googleapis\.com\//', $src ) ) {
486
+ $src = remove_query_arg( 'ver', $src );
487
+ if ( strpos( $src, $this->google_scripts[ $this->jquery_tag ][1] . '.js' ) ) {
488
+ $this->noconflict_next = true;
489
+ }
490
+ }
491
+ return $src;
492
+ }
493
+
494
+ static function remove_ver_query_filter( $src ) {
495
+ $ugl = self::get_instance();
496
+ return $ugl->remove_ver_query( $src );
497
+ }
498
+ }
499
+ }
500
+
501
+ //instantiate the class
502
+ if ( class_exists( 'JCP_UseGoogleLibraries' ) ) {
503
+ JCP_UseGoogleLibraries::configure_plugin();
504
+ }
lang/es_ES.mo DELETED
Binary file
lang/es_ES.po DELETED
@@ -1,372 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Content-Type: text/plain; charset=UTF-8\n"
4
- "Content-Transfer-Encoding: 8bit\n"
5
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
6
- "Project-Id-Version: Speed Booster Pack\n"
7
- "POT-Creation-Date: \n"
8
- "PO-Revision-Date: \n"
9
- "Last-Translator: jelena kovacevic <jecajeca260@gmail.com>\n"
10
- "Language-Team: Tiguandesign.com <tiguan@tiguandesign.com>\n"
11
- "MIME-Version: 1.0\n"
12
- "Language: en\n"
13
- "X-Generator: Poedit 1.5.5\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "X-Poedit-KeywordsList: _e;__\n"
16
- "X-Poedit-Basepath: .\n"
17
- "X-Poedit-SearchPath-0: ..\n"
18
- "X-Poedit-SearchPath-1: ...\n"
19
-
20
- #. Text in echo
21
- #: speed-booster-pack/inc/template/options.php:399
22
- msgid " with guidelines to enhance your website performance."
23
- msgstr "con directrices para mejorar el rendimiento de su sitio web.."
24
-
25
- #. Text in echo
26
- #: speed-booster-pack/inc/template/options.php:360
27
- msgid "*The list may be incomplete in some circumstances."
28
- msgstr "* La lista puede ser incompleta en algunas circunstancias"
29
-
30
- #. Text in echo
31
- #: speed-booster-pack/inc/template/options.php:132
32
- msgid "Active Plugins:"
33
- msgstr "Plugins activos:"
34
-
35
- #. Text in echo
36
- #: speed-booster-pack/inc/template/options.php:367
37
- msgid "Additional information:"
38
- msgstr "Información adicional:"
39
-
40
- #. Text in echo
41
- #: speed-booster-pack/inc/template/options.php:342
42
- msgid ""
43
- "As a guidance, here is a list of css handles of each enqueued style detected "
44
- "by our plugin:"
45
- msgstr ""
46
- "Como guía, aquí está una lista de los handles css de cada estilo en cola "
47
- "detectado por nuestro plugin:"
48
-
49
- #. Text in echo
50
- #: speed-booster-pack/inc/template/options.php:200
51
- msgid ""
52
- "As a guidance, here is a list of script handles and script paths of each "
53
- "enqueued script detected by our plugin:"
54
- msgstr ""
55
- "Como guía, aquí está una lista de handles de script y rutas de script de "
56
- "cada secuencia de comandos en cola detectado por nuestro plugin:"
57
-
58
- #. Text in echo
59
- #: speed-booster-pack/inc/template/options.php:19
60
- msgid "Boost Your Website Speed!"
61
- msgstr "¡Aumente la velocidad de su Sitio Web!"
62
-
63
- #. Text in echo
64
- #: speed-booster-pack/inc/template/options.php:348
65
- msgid "CSS Handle"
66
- msgstr "Handle CSS"
67
-
68
- #. Text in echo
69
- #: speed-booster-pack/inc/template/options.php:265
70
- msgid "Change the default image compression level"
71
- msgstr "Cambiar el nivel de compresión de imágenes"
72
-
73
- #. Text in echo
74
- #: speed-booster-pack/inc/template/options.php:277
75
- msgid "Compression level:"
76
- msgstr "Nivel de compresión:"
77
-
78
- #. Text in echo
79
- #: speed-booster-pack/inc/template/options.php:172
80
- msgid "Copy the HTML code of the script from your page source and add it below"
81
- msgstr ""
82
- "Copie el código HTML del script de la fuente de su página y añádalo a "
83
- "continuación"
84
-
85
- #. Text in echo
86
- #: speed-booster-pack/inc/template/options.php:45
87
- msgid "Defer parsing of javascript files"
88
- msgstr "Aplazar análisis de archivos javascript"
89
-
90
- #. Text in echo
91
- #: speed-booster-pack/inc/template/options.php:325
92
- msgid "Disable all above CSS options on mobile devices"
93
- msgstr "Desactivar todas las opciones CSS de arriba en dispositivos móviles"
94
-
95
- #. Text in echo
96
- #: speed-booster-pack/inc/template/options.php:333
97
- msgid ""
98
- "Enter one by line, the handles of css files or the final part of the style "
99
- "URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</"
100
- "code>"
101
- msgstr ""
102
- "Introduzca uno por línea, los handles de los archivos CSS o la parte final "
103
- "de la URL del estilo. Por ejemplo: <code>-font awesome </code> o <code> font-"
104
- "awesome.min.css </code>"
105
-
106
- #. Text in echo
107
- #: speed-booster-pack/inc/template/options.php:257
108
- msgid ""
109
- "Enter one by text field, the final part of the js files that you want to be "
110
- "excluded from defer parsing option. For example: <code>jquery.min.js</code> "
111
- "If you want to exclude more than 4 scripts, your page score will be hit and "
112
- "therefore the use of \"Defer parsing of javascript files\" option will "
113
- "become useless so you can disable it"
114
- msgstr ""
115
- "Introduzca uno por campo de texto, la parte final de los archivos js que "
116
- "desea que sea excluido de la opción del análisis defer. Por ejemplo: <code> "
117
- "jquery.min.js </code> Si desea excluir más de 4 scripts, el puntaje de su "
118
- "página se verá afectado y por lo tanto el uso de la opción \"Análisis defer "
119
- "de archivos javascript\" se convertirá en inútil por lo que puede "
120
- "desactivarla"
121
-
122
- #. Text in echo
123
- #: speed-booster-pack/inc/template/options.php:195
124
- msgid ""
125
- "Enter one js handle per text field, in the left area and the corespondent "
126
- "html script in the right text fields."
127
- msgstr ""
128
- "Introduzca un handle js por campo de texto, en la parte izquierda y la "
129
- "secuencia de comandos HTML correspondiente en los campos de texto adecuados."
130
-
131
- #. Text in echo
132
- #: speed-booster-pack/inc/template/options.php:233
133
- msgid "Exclude scripts from being deferred"
134
- msgstr "Excluir scripts de ser diferidos"
135
-
136
- #. Text in echo
137
- #: speed-booster-pack/inc/template/options.php:143
138
- msgid "Exclude scripts from being moved to the footer"
139
- msgstr "Excluir scripts de ser trasladado al pie de página"
140
-
141
- #. Text in echo
142
- #: speed-booster-pack/inc/template/options.php:330
143
- msgid "Exclude styles from asynchronously option: "
144
- msgstr "Excluir estilos de opción de forma asíncrona:"
145
-
146
- #. Text in echo
147
- #: speed-booster-pack/inc/template/options.php:23
148
- msgid "General options"
149
- msgstr "Opciones generales"
150
-
151
- #. Text in echo
152
- #: speed-booster-pack/inc/template/options.php:104
153
- msgid "Home Page Load Stats"
154
- msgstr "Página de inicio Carga Estadísticas"
155
-
156
- #. Text in echo
157
- #: speed-booster-pack/inc/template/options.php:195
158
- msgid ""
159
- "If you want to exclude more than 4 scripts, your page score will be hit and "
160
- "therefore the use of \"Move scripts to footer\" option will become useless "
161
- "so you can disable it."
162
- msgstr ""
163
- "Si desea excluir más de 4 scripts, el puntaje de su página se verá afectado "
164
- "y por lo tanto el uso de la opción \"Mover scripts a pie de página\" se "
165
- "convertirá en inútil por lo que puede desactivarla."
166
-
167
- #. Text in echo
168
- #: speed-booster-pack/inc/template/options.php:320
169
- msgid "Insert all CSS styles inline to the footer"
170
- msgstr "Inserte todos los estilos CSS en línea al pie de página"
171
-
172
- #. Text in echo
173
- #: speed-booster-pack/inc/template/options.php:368
174
- msgid "Insert all CSS styles inline to the footer: "
175
- msgstr "Insertar todos los estilos CSS en línea al pie de página:"
176
-
177
- #. Text in echo
178
- #: speed-booster-pack/inc/template/options.php:416
179
- msgid "Installed Version:"
180
- msgstr "Versión instalada:"
181
-
182
- #. Text in echo
183
- #: speed-booster-pack/inc/template/options.php:55
184
- msgid "Lazy load images to improve speed"
185
- msgstr "Cargar imágenes Lazy para mejorar la velocidad"
186
-
187
- #. Text in echo
188
- #: speed-booster-pack/inc/template/options.php:305
189
- msgid "Load CSS asynchronously"
190
- msgstr "Cargar CSS de forma asíncrona"
191
-
192
- #. Text in echo
193
- #: speed-booster-pack/inc/template/options.php:40
194
- msgid "Load JS from Google Libraries"
195
- msgstr "Cargar JS desde Bibliotecas Google"
196
-
197
- #. Text in echo
198
- #: speed-booster-pack/inc/template/options.php:31
199
- msgid "Main plugin options"
200
- msgstr "Opciones Principales del plugin"
201
-
202
- #. Text in echo
203
- #: speed-booster-pack/inc/template/options.php:313
204
- msgid "Minify all CSS styles"
205
- msgstr "Minimizar todos los estilos CSS"
206
-
207
- #. Text in echo
208
- #: speed-booster-pack/inc/template/options.php:35
209
- msgid "Move scripts to the footer"
210
- msgstr "Mover scripts al pie de página"
211
-
212
- #. Text in echo
213
- #: speed-booster-pack/inc/template/options.php:289
214
- msgid ""
215
- "Note that any changes you make will only affect new images uploaded to your "
216
- "site. If you want to update all of your images with the new sizes, install "
217
- "and run the Regenerate Thumbnails plugin. As a reference, a lower level of "
218
- "compression means more performance. We recommend you choose a compression "
219
- "level between 50 and 75."
220
- msgstr ""
221
- "Tenga en cuenta que los cambios que realice sólo afectarán a las nuevas "
222
- "imágenes subidas a su sitio. Si desea actualizar todas sus imágenes con los "
223
- "nuevos tamaños, instale y ejecute el plugin Regenerar miniaturas. Como "
224
- "referencia, un menor nivel de compresión significa más rendimiento. Le "
225
- "recomendamos que escoja un nivel de compresión entre 50 y 75."
226
-
227
- #. Text in echo
228
- #: speed-booster-pack/inc/template/options.php:118
229
- msgid "Number of executed queries:"
230
- msgstr "Número de consultas ejecutadas:"
231
-
232
- #. Text in echo
233
- #: speed-booster-pack/inc/template/options.php:106
234
- msgid "Page loading time in seconds:"
235
- msgstr "Tiempo de carga de página en segundos:"
236
-
237
- #. Text in echo
238
- #: speed-booster-pack/inc/template/options.php:131
239
- msgid "Peak Memory Used:"
240
- msgstr "Memoria pico utilizada:"
241
-
242
- #. Text in echo
243
- #: speed-booster-pack/inc/template/options.php:195
244
- msgid "Read more"
245
- msgstr "Leer más"
246
-
247
- #. Text in echo
248
- #: speed-booster-pack/inc/template/options.php:399
249
- msgid "Read online plugin documentation"
250
- msgstr "Leer la documentación en línea del plugin"
251
-
252
- #. Text in echo
253
- #: speed-booster-pack/inc/template/options.php:423
254
- msgid "Released date:"
255
- msgstr "Fecha de lanzamiento:"
256
-
257
- #. Text in echo
258
- #: speed-booster-pack/inc/template/options.php:81
259
- msgid "Remove Adjacent Posts Links"
260
- msgstr "Quitar Enlaces de Mensajes Adyacentes"
261
-
262
- #. Text in echo
263
- #: speed-booster-pack/inc/template/options.php:71
264
- msgid "Remove RSD Link"
265
- msgstr "Eliminar Enlace RSD"
266
-
267
- #. Text in echo
268
- #: speed-booster-pack/inc/template/options.php:86
269
- msgid "Remove Windows Manifest"
270
- msgstr "Eliminar Manifiesto Windows"
271
-
272
- #. Text in echo
273
- #: speed-booster-pack/inc/template/options.php:76
274
- msgid "Remove WordPress Shortlink"
275
- msgstr "Eliminar Shortlink WordPress"
276
-
277
- #. Text in echo
278
- #: speed-booster-pack/inc/template/options.php:96
279
- msgid "Remove all rss feed links"
280
- msgstr "Quitar todos los enlaces rss feed"
281
-
282
- #. Text in echo
283
- #: speed-booster-pack/inc/template/options.php:67
284
- msgid "Remove junk header tags"
285
- msgstr "Eliminar encabezados basura"
286
-
287
- #. Text in echo
288
- #: speed-booster-pack/inc/template/options.php:50
289
- msgid "Remove query strings"
290
- msgstr "Retirar las cadenas de consulta"
291
-
292
- #. Text in echo
293
- #: speed-booster-pack/inc/template/options.php:91
294
- msgid "Remove the WordPress Version"
295
- msgstr "Eiminar la versión WordPress"
296
-
297
- #. Text in echo
298
- #: speed-booster-pack/inc/template/options.php:60
299
- msgid "Removes extra Font Awesome styles"
300
- msgstr "Eliminar estilos de Font Awesome adicionales"
301
-
302
- #. Text in echo
303
- #: speed-booster-pack/inc/template/options.php:149
304
- #: speed-booster-pack/inc/template/options.php:206
305
- msgid "Script Handle"
306
- msgstr "Handle de Script"
307
-
308
- #. Text in echo
309
- #: speed-booster-pack/inc/template/options.php:207
310
- msgid "Script Path"
311
- msgstr "Ruta del script"
312
-
313
- #. Text in echo
314
- #: speed-booster-pack/inc/template/options.php:299
315
- msgid "Still need more speed?"
316
- msgstr "¿Todavía necesita más velocidad?"
317
-
318
- #. Text in echo
319
- #: speed-booster-pack/inc/template/options.php:286
320
- msgid ""
321
- "The default image compression setting in WordPress is 90%. Compressing your "
322
- "images further than the default will make your file sizes even smaller and "
323
- "will boost your site performance."
324
- msgstr ""
325
- "El ajuste de compresión de imagen por defecto de WordPress es del 90%. La "
326
- "compresión de imágenes más allá del de por defecto hará los tamaños de "
327
- "archivos aún más pequeños y aumentará el rendimiento de su sitio."
328
-
329
- #. Text in echo
330
- #: speed-booster-pack/inc/template/options.php:405
331
- msgid "Version Information"
332
- msgstr "Información de la versión"
333
-
334
- #. Text in echo
335
- #: speed-booster-pack/inc/template/options.php:389
336
- msgid "What do these settings mean?"
337
- msgstr "¿Qué significan estos ajustes?"
338
-
339
- #. Text in echo
340
- #: speed-booster-pack/inc/template/options.php:195
341
- msgid "detailed instructions"
342
- msgstr "Instrucciones detalladas"
343
-
344
- #. Text in echo
345
- #: speed-booster-pack/inc/template/options.php:195
346
- msgid "on this option on plugin documentation."
347
- msgstr "sobre esta opción en la documentación del plugin."
348
-
349
- #. Text in echo
350
- #: speed-booster-pack/inc/template/options.php:126
351
- msgid "q"
352
- msgstr "Q"
353
-
354
- #. Text in echo
355
- #: speed-booster-pack/inc/template/options.php:114
356
- msgid "s"
357
- msgstr "S"
358
-
359
- #. Text in echo
360
- #: speed-booster-pack/inc/template/options.php:368
361
- msgid ""
362
- "this option will eliminate render-blocking CSS warning in Google Page Speed "
363
- "test. If there is something broken after activation, you need to disable "
364
- "this option. Please note that before enabling this sensitive option, it is "
365
- "strongly recommended that you also enable the \"Move scripts to the footer\" "
366
- "option."
367
- msgstr ""
368
- "esta opción eliminará render de bloqueo de advertencia CSS en la prueba de "
369
- "Velocidad de Página Google Page. Si hay algo que falle después de la "
370
- "activación, es necesario deshabilitar esta opción. Tenga en cuenta que antes "
371
- "de habilitar esta opción sensible, se recomienda encarecidamente que también "
372
- "habilite la opción \"Mover scripts al pie de página\"."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/ro_RO.mo DELETED
Binary file
lang/ro_RO.po DELETED
@@ -1,374 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Content-Type: text/plain; charset=UTF-8\n"
4
- "Content-Transfer-Encoding: 8bit\n"
5
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
6
- "Project-Id-Version: Speed Booster Pack\n"
7
- "POT-Creation-Date: \n"
8
- "PO-Revision-Date: \n"
9
- "Last-Translator: Liviu Costache <tiguan@tiguandesign.com>\n"
10
- "Language-Team: Tiguandesign.com <tiguan@tiguandesign.com>\n"
11
- "MIME-Version: 1.0\n"
12
- "Language: en\n"
13
- "X-Generator: Poedit 1.6.7\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "X-Poedit-KeywordsList: _e;__\n"
16
- "X-Poedit-Basepath: .\n"
17
- "X-Poedit-SearchPath-0: ..\n"
18
- "X-Poedit-SearchPath-1: ...\n"
19
-
20
- #. Text in echo
21
- #: speed-booster-pack/inc/template/options.php:399
22
- msgid " with guidelines to enhance your website performance."
23
- msgstr "care conţine îndrumari pentru a îmbunătăți performanța site-ul tău."
24
-
25
- #. Text in echo
26
- #: speed-booster-pack/inc/template/options.php:360
27
- msgid "*The list may be incomplete in some circumstances."
28
- msgstr "* Lista poate fi incompletă în anumite circumstanțe."
29
-
30
- #. Text in echo
31
- #: speed-booster-pack/inc/template/options.php:132
32
- msgid "Active Plugins:"
33
- msgstr "Pluginuri Active:"
34
-
35
- #. Text in echo
36
- #: speed-booster-pack/inc/template/options.php:367
37
- msgid "Additional information:"
38
- msgstr "Informaţii suplimentare:"
39
-
40
- #. Text in echo
41
- #: speed-booster-pack/inc/template/options.php:342
42
- msgid ""
43
- "As a guidance, here is a list of css handles of each enqueued style detected "
44
- "by our plugin:"
45
- msgstr ""
46
- "Orientativ, aici este o listă cu toate handle-urile CSS detectate de "
47
- "pluginul nostru:"
48
-
49
- #. Text in echo
50
- #: speed-booster-pack/inc/template/options.php:200
51
- msgid ""
52
- "As a guidance, here is a list of script handles and script paths of each "
53
- "enqueued script detected by our plugin:"
54
- msgstr ""
55
- "Orientativ, aici este o listă cu toate handle-urile JS si calea acestora, "
56
- "detectate de pluginul nostru:"
57
-
58
- #. Text in echo
59
- #: speed-booster-pack/inc/template/options.php:19
60
- msgid "Boost Your Website Speed!"
61
- msgstr "Sporeşte-ţi viteza site-ului!"
62
-
63
- #. Text in echo
64
- #: speed-booster-pack/inc/template/options.php:348
65
- msgid "CSS Handle"
66
- msgstr "Handle pentru CSS"
67
-
68
- #. Text in echo
69
- #: speed-booster-pack/inc/template/options.php:265
70
- msgid "Change the default image compression level"
71
- msgstr "Schimbă nivelul de compresie al imaginilor"
72
-
73
- #. Text in echo
74
- #: speed-booster-pack/inc/template/options.php:277
75
- msgid "Compression level:"
76
- msgstr "Nivelul de compresie:"
77
-
78
- #. Text in echo
79
- #: speed-booster-pack/inc/template/options.php:172
80
- msgid "Copy the HTML code of the script from your page source and add it below"
81
- msgstr ""
82
- "Copiaţi codul HTML al script-ului din sursa paginii, şi adăugaţi-l mai jos"
83
-
84
- #. Text in echo
85
- #: speed-booster-pack/inc/template/options.php:45
86
- msgid "Defer parsing of javascript files"
87
- msgstr "Amână analizarea fişierelor javascript"
88
-
89
- #. Text in echo
90
- #: speed-booster-pack/inc/template/options.php:325
91
- msgid "Disable all above CSS options on mobile devices"
92
- msgstr ""
93
- "Dezactivează toate opţiunile CSS de mai sus pentru dispozitivele mobile"
94
-
95
- #. Text in echo
96
- #: speed-booster-pack/inc/template/options.php:333
97
- msgid ""
98
- "Enter one by line, the handles of css files or the final part of the style "
99
- "URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</"
100
- "code>"
101
- msgstr ""
102
- "Introdu câte una pe linie, denumirile fişierelor CSS sau partea finală a URL-"
103
- "ului acestora. De exemplu: <code>font-awesome</code> sau <code>font-awesome."
104
- "min.css</code>"
105
-
106
- #. Text in echo
107
- #: speed-booster-pack/inc/template/options.php:257
108
- msgid ""
109
- "Enter one by text field, the final part of the js files that you want to be "
110
- "excluded from defer parsing option. For example: <code>jquery.min.js</code> "
111
- "If you want to exclude more than 4 scripts, your page score will be hit and "
112
- "therefore the use of \"Defer parsing of javascript files\" option will "
113
- "become useless so you can disable it"
114
- msgstr ""
115
- "Introdu câte una pe linie, partea finală a fişierelor JS pe care vrei să le "
116
- "excluzi de la opţiunea \"Amână analizarea fişierelor javascript\" De "
117
- "exemplu: <code>jquery.min.js</code> Dacă doreşti să excluzi mai mult de 4 "
118
- "script-uri, scorul pagini va avea de suferit şi, prin urmare, utilizarea "
119
- "opţiunii \"Amână analizarea fişierelor javascript \" va deveni inutilă, şi "
120
- "o poţi dezactiva."
121
-
122
- #. Text in echo
123
- #: speed-booster-pack/inc/template/options.php:195
124
- msgid ""
125
- "Enter one js handle per text field, in the left area and the corespondent "
126
- "html script in the right text fields."
127
- msgstr ""
128
- "Introdu un handle js pe câte un câmp text, în zona din stânga şi codul HTML "
129
- "al script-ului corespondent în câmpurile text din dreapta."
130
-
131
- #. Text in echo
132
- #: speed-booster-pack/inc/template/options.php:233
133
- msgid "Exclude scripts from being deferred"
134
- msgstr ""
135
- "Exclude script-uri de la opţiunea \"Amână analizarea fişierelor javascript\""
136
-
137
- #. Text in echo
138
- #: speed-booster-pack/inc/template/options.php:143
139
- msgid "Exclude scripts from being moved to the footer"
140
- msgstr "Exclude script-uri de la opţiunea \"Muta script-uri in footer\""
141
-
142
- #. Text in echo
143
- #: speed-booster-pack/inc/template/options.php:330
144
- msgid "Exclude styles from asynchronously option: "
145
- msgstr "Exclude stiluri de la opţiunea \"Încărcare CSS în mod asincron\""
146
-
147
- #. Text in echo
148
- #: speed-booster-pack/inc/template/options.php:23
149
- msgid "General options"
150
- msgstr "Opţiuni Generale"
151
-
152
- #. Text in echo
153
- #: speed-booster-pack/inc/template/options.php:104
154
- msgid "Home Page Load Stats"
155
- msgstr "Încărcarea paginii de bază"
156
-
157
- #. Text in echo
158
- #: speed-booster-pack/inc/template/options.php:195
159
- msgid ""
160
- "If you want to exclude more than 4 scripts, your page score will be hit and "
161
- "therefore the use of \"Move scripts to footer\" option will become useless "
162
- "so you can disable it."
163
- msgstr ""
164
- "Dacă doreşti să excluzi mai mult de 4 script-uri, scorul paginii va avea de "
165
- "suferit şi, prin urmare, utilizarea opţiunii \"Mută script-uri în footer \" "
166
- "va deveni inutilă, şi o poţi dezactiva."
167
-
168
- #. Text in echo
169
- #: speed-booster-pack/inc/template/options.php:320
170
- msgid "Insert all CSS styles inline to the footer"
171
- msgstr "Mută toate stilurile CSS în linie în footer"
172
-
173
- #. Text in echo
174
- #: speed-booster-pack/inc/template/options.php:368
175
- msgid "Insert all CSS styles inline to the footer: "
176
- msgstr "Mută toate stilurile CSS în linie în footer:"
177
-
178
- #. Text in echo
179
- #: speed-booster-pack/inc/template/options.php:416
180
- msgid "Installed Version:"
181
- msgstr "Versiunea instalată:"
182
-
183
- #. Text in echo
184
- #: speed-booster-pack/inc/template/options.php:55
185
- msgid "Lazy load images to improve speed"
186
- msgstr "Întârzie încărcarea imaginilor"
187
-
188
- #. Text in echo
189
- #: speed-booster-pack/inc/template/options.php:305
190
- msgid "Load CSS asynchronously"
191
- msgstr "Încărcare CSS în mod asincron"
192
-
193
- #. Text in echo
194
- #: speed-booster-pack/inc/template/options.php:40
195
- msgid "Load JS from Google Libraries"
196
- msgstr "Încarcă JS din Google Libraries"
197
-
198
- #. Text in echo
199
- #: speed-booster-pack/inc/template/options.php:31
200
- msgid "Main plugin options"
201
- msgstr "Opţiunile principale"
202
-
203
- #. Text in echo
204
- #: speed-booster-pack/inc/template/options.php:313
205
- msgid "Minify all CSS styles"
206
- msgstr "Comprimă toate fişierele CSS"
207
-
208
- #. Text in echo
209
- #: speed-booster-pack/inc/template/options.php:35
210
- msgid "Move scripts to the footer"
211
- msgstr "Muta script-uri in footer"
212
-
213
- #. Text in echo
214
- #: speed-booster-pack/inc/template/options.php:289
215
- msgid ""
216
- "Note that any changes you make will only affect new images uploaded to your "
217
- "site. If you want to update all of your images with the new sizes, install "
218
- "and run the Regenerate Thumbnails plugin. As a reference, a lower level of "
219
- "compression means more performance. We recommend you choose a compression "
220
- "level between 50 and 75."
221
- msgstr ""
222
- "Reţine că după alegerea nivelului de compresie, modificările vor afecta "
223
- "numai imaginile noi încărcate pe site. Dacă doreşti să actualizezi toate "
224
- "imaginile la noul nivel de compresie, instalează şi rulează plugin-ul "
225
- "Regenerate Thumbnails. Că referinţă, un nivel mai scăzut de comprimare "
226
- "înseamnă mai multă performanţă a site-ului. Îţi recomandăm să alegi un nivel "
227
- "de compresie cu valorea cuprinsă între 50 şi 75."
228
-
229
- #. Text in echo
230
- #: speed-booster-pack/inc/template/options.php:118
231
- msgid "Number of executed queries:"
232
- msgstr "Numărul de interogări (queries) executate:"
233
-
234
- #. Text in echo
235
- #: speed-booster-pack/inc/template/options.php:106
236
- msgid "Page loading time in seconds:"
237
- msgstr "Timpul de încărcare a paginii în secunde:"
238
-
239
- #. Text in echo
240
- #: speed-booster-pack/inc/template/options.php:131
241
- msgid "Peak Memory Used:"
242
- msgstr "Memoria folosită"
243
-
244
- #. Text in echo
245
- #: speed-booster-pack/inc/template/options.php:195
246
- msgid "Read more"
247
- msgstr "Citeşte mai multe"
248
-
249
- #. Text in echo
250
- #: speed-booster-pack/inc/template/options.php:399
251
- msgid "Read online plugin documentation"
252
- msgstr "Citeşte online documentaţia pluginului"
253
-
254
- #. Text in echo
255
- #: speed-booster-pack/inc/template/options.php:423
256
- msgid "Released date:"
257
- msgstr "Data lansării:"
258
-
259
- #. Text in echo
260
- #: speed-booster-pack/inc/template/options.php:81
261
- msgid "Remove Adjacent Posts Links"
262
- msgstr "Elimină Adjacent Posts Links"
263
-
264
- #. Text in echo
265
- #: speed-booster-pack/inc/template/options.php:71
266
- msgid "Remove RSD Link"
267
- msgstr "Elimină linkul RSD"
268
-
269
- #. Text in echo
270
- #: speed-booster-pack/inc/template/options.php:86
271
- msgid "Remove Windows Manifest"
272
- msgstr "Elimină Windows Manifest"
273
-
274
- #. Text in echo
275
- #: speed-booster-pack/inc/template/options.php:76
276
- msgid "Remove WordPress Shortlink"
277
- msgstr "Elimină WordPress Shortlink"
278
-
279
- #. Text in echo
280
- #: speed-booster-pack/inc/template/options.php:96
281
- msgid "Remove all rss feed links"
282
- msgstr "Elimină toate link-urile RSS feed"
283
-
284
- #. Text in echo
285
- #: speed-booster-pack/inc/template/options.php:67
286
- msgid "Remove junk header tags"
287
- msgstr "Elimină tag-urile inutile din header"
288
-
289
- #. Text in echo
290
- #: speed-booster-pack/inc/template/options.php:50
291
- msgid "Remove query strings"
292
- msgstr "Elimină versiunea fisierelor"
293
-
294
- #. Text in echo
295
- #: speed-booster-pack/inc/template/options.php:91
296
- msgid "Remove the WordPress Version"
297
- msgstr "Elimină versiunea WordPress"
298
-
299
- #. Text in echo
300
- #: speed-booster-pack/inc/template/options.php:60
301
- msgid "Removes extra Font Awesome styles"
302
- msgstr "Elimină extra Font Awesome CSS"
303
-
304
- #. Text in echo
305
- #: speed-booster-pack/inc/template/options.php:149
306
- #: speed-booster-pack/inc/template/options.php:206
307
- msgid "Script Handle"
308
- msgstr "Script Handle"
309
-
310
- #. Text in echo
311
- #: speed-booster-pack/inc/template/options.php:207
312
- msgid "Script Path"
313
- msgstr "Calea scriptului"
314
-
315
- #. Text in echo
316
- #: speed-booster-pack/inc/template/options.php:299
317
- msgid "Still need more speed?"
318
- msgstr "Încă ai nevoie de mai multă viteză?"
319
-
320
- #. Text in echo
321
- #: speed-booster-pack/inc/template/options.php:286
322
- msgid ""
323
- "The default image compression setting in WordPress is 90%. Compressing your "
324
- "images further than the default will make your file sizes even smaller and "
325
- "will boost your site performance."
326
- msgstr ""
327
- "Nivelul implicit de comprimare a imaginilor în WordPress este de 90%. "
328
- "Comprimarea imaginilor la un nivel mai mare decât nivelul implicit va "
329
- "micşora dimensiunile fişierelor şi va stimula performanta site-ului tău."
330
-
331
- #. Text in echo
332
- #: speed-booster-pack/inc/template/options.php:405
333
- msgid "Version Information"
334
- msgstr "Informaţii despre versiune"
335
-
336
- #. Text in echo
337
- #: speed-booster-pack/inc/template/options.php:389
338
- msgid "What do these settings mean?"
339
- msgstr "Ce reprezintă toate aceste opţiuni?"
340
-
341
- #. Text in echo
342
- #: speed-booster-pack/inc/template/options.php:195
343
- msgid "detailed instructions"
344
- msgstr "instrucţiuni detaliate"
345
-
346
- #. Text in echo
347
- #: speed-booster-pack/inc/template/options.php:195
348
- msgid "on this option on plugin documentation."
349
- msgstr "cu privire la această opţiune în documentaţia puginului."
350
-
351
- #. Text in echo
352
- #: speed-booster-pack/inc/template/options.php:126
353
- msgid "q"
354
- msgstr "q"
355
-
356
- #. Text in echo
357
- #: speed-booster-pack/inc/template/options.php:114
358
- msgid "s"
359
- msgstr "q"
360
-
361
- #. Text in echo
362
- #: speed-booster-pack/inc/template/options.php:368
363
- msgid ""
364
- "this option will eliminate render-blocking CSS warning in Google Page Speed "
365
- "test. If there is something broken after activation, you need to disable "
366
- "this option. Please note that before enabling this sensitive option, it is "
367
- "strongly recommended that you also enable the \"Move scripts to the footer\" "
368
- "option."
369
- msgstr ""
370
- "această opţiune va elimina mesajul render-blocking CSS din Google Page "
371
- "Speed. Dacă observi că ceva nu merge după activare, va trebui să dezactivezi "
372
- "această opţiune. Te rog să notezi că înainte de activarea acestei opţiuni "
373
- "sensibile, este neapărat necesar că şi opţiunea de mutare a scripturilor în "
374
- "footer trebuie să fie activă."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/sb-pack.mo DELETED
Binary file
lang/sb-pack.po DELETED
@@ -1,339 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Content-Type: text/plain; charset=UTF-8\n"
4
- "Content-Transfer-Encoding: 8bit\n"
5
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
6
- "Project-Id-Version: Speed Booster Pack\n"
7
- "POT-Creation-Date: \n"
8
- "PO-Revision-Date: \n"
9
- "Last-Translator: Liviu Costache <tiguan@tiguandesign.com>\n"
10
- "Language-Team: Tiguandesign.com <tiguan@tiguandesign.com>\n"
11
- "MIME-Version: 1.0\n"
12
- "Language: en\n"
13
- "X-Generator: Poedit 1.6.7\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "X-Poedit-KeywordsList: _e;__\n"
16
- "X-Poedit-Basepath: .\n"
17
- "X-Poedit-SearchPath-0: ..\n"
18
- "X-Poedit-SearchPath-1: ...\n"
19
-
20
- #. Text in echo
21
- #: speed-booster-pack/inc/template/options.php:399
22
- msgid " with guidelines to enhance your website performance."
23
- msgstr ""
24
-
25
- #. Text in echo
26
- #: speed-booster-pack/inc/template/options.php:360
27
- msgid "*The list may be incomplete in some circumstances."
28
- msgstr ""
29
-
30
- #. Text in echo
31
- #: speed-booster-pack/inc/template/options.php:132
32
- msgid "Active Plugins:"
33
- msgstr ""
34
-
35
- #. Text in echo
36
- #: speed-booster-pack/inc/template/options.php:367
37
- msgid "Additional information:"
38
- msgstr ""
39
-
40
- #. Text in echo
41
- #: speed-booster-pack/inc/template/options.php:342
42
- msgid ""
43
- "As a guidance, here is a list of css handles of each enqueued style detected "
44
- "by our plugin:"
45
- msgstr ""
46
-
47
- #. Text in echo
48
- #: speed-booster-pack/inc/template/options.php:200
49
- msgid ""
50
- "As a guidance, here is a list of script handles and script paths of each "
51
- "enqueued script detected by our plugin:"
52
- msgstr ""
53
-
54
- #. Text in echo
55
- #: speed-booster-pack/inc/template/options.php:19
56
- msgid "Boost Your Website Speed!"
57
- msgstr ""
58
-
59
- #. Text in echo
60
- #: speed-booster-pack/inc/template/options.php:348
61
- msgid "CSS Handle"
62
- msgstr ""
63
-
64
- #. Text in echo
65
- #: speed-booster-pack/inc/template/options.php:265
66
- msgid "Change the default image compression level"
67
- msgstr ""
68
-
69
- #. Text in echo
70
- #: speed-booster-pack/inc/template/options.php:277
71
- msgid "Compression level:"
72
- msgstr ""
73
-
74
- #. Text in echo
75
- #: speed-booster-pack/inc/template/options.php:172
76
- msgid "Copy the HTML code of the script from your page source and add it below"
77
- msgstr ""
78
-
79
- #. Text in echo
80
- #: speed-booster-pack/inc/template/options.php:45
81
- msgid "Defer parsing of javascript files"
82
- msgstr ""
83
-
84
- #. Text in echo
85
- #: speed-booster-pack/inc/template/options.php:325
86
- msgid "Disable all above CSS options on mobile devices"
87
- msgstr ""
88
-
89
- #. Text in echo
90
- #: speed-booster-pack/inc/template/options.php:333
91
- msgid ""
92
- "Enter one by line, the handles of css files or the final part of the style "
93
- "URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</"
94
- "code>"
95
- msgstr ""
96
-
97
- #. Text in echo
98
- #: speed-booster-pack/inc/template/options.php:257
99
- msgid ""
100
- "Enter one by text field, the final part of the js files that you want to be "
101
- "excluded from defer parsing option. For example: <code>jquery.min.js</code> "
102
- "If you want to exclude more than 4 scripts, your page score will be hit and "
103
- "therefore the use of \"Defer parsing of javascript files\" option will "
104
- "become useless so you can disable it"
105
- msgstr ""
106
-
107
- #. Text in echo
108
- #: speed-booster-pack/inc/template/options.php:195
109
- msgid ""
110
- "Enter one js handle per text field, in the left area and the corespondent "
111
- "html script in the right text fields."
112
- msgstr ""
113
-
114
- #. Text in echo
115
- #: speed-booster-pack/inc/template/options.php:233
116
- msgid "Exclude scripts from being deferred"
117
- msgstr ""
118
-
119
- #. Text in echo
120
- #: speed-booster-pack/inc/template/options.php:143
121
- msgid "Exclude scripts from being moved to the footer"
122
- msgstr ""
123
-
124
- #. Text in echo
125
- #: speed-booster-pack/inc/template/options.php:330
126
- msgid "Exclude styles from asynchronously option: "
127
- msgstr ""
128
-
129
- #. Text in echo
130
- #: speed-booster-pack/inc/template/options.php:23
131
- msgid "General options"
132
- msgstr ""
133
-
134
- #. Text in echo
135
- #: speed-booster-pack/inc/template/options.php:104
136
- msgid "Home Page Load Stats"
137
- msgstr ""
138
-
139
- #. Text in echo
140
- #: speed-booster-pack/inc/template/options.php:195
141
- msgid ""
142
- "If you want to exclude more than 4 scripts, your page score will be hit and "
143
- "therefore the use of \"Move scripts to footer\" option will become useless "
144
- "so you can disable it."
145
- msgstr ""
146
-
147
- #. Text in echo
148
- #: speed-booster-pack/inc/template/options.php:320
149
- msgid "Insert all CSS styles inline to the footer"
150
- msgstr ""
151
-
152
- #. Text in echo
153
- #: speed-booster-pack/inc/template/options.php:368
154
- msgid "Insert all CSS styles inline to the footer: "
155
- msgstr ""
156
-
157
- #. Text in echo
158
- #: speed-booster-pack/inc/template/options.php:416
159
- msgid "Installed Version:"
160
- msgstr ""
161
-
162
- #. Text in echo
163
- #: speed-booster-pack/inc/template/options.php:55
164
- msgid "Lazy load images to improve speed"
165
- msgstr ""
166
-
167
- #. Text in echo
168
- #: speed-booster-pack/inc/template/options.php:305
169
- msgid "Load CSS asynchronously"
170
- msgstr ""
171
-
172
- #. Text in echo
173
- #: speed-booster-pack/inc/template/options.php:40
174
- msgid "Load JS from Google Libraries"
175
- msgstr ""
176
-
177
- #. Text in echo
178
- #: speed-booster-pack/inc/template/options.php:31
179
- msgid "Main plugin options"
180
- msgstr ""
181
-
182
- #. Text in echo
183
- #: speed-booster-pack/inc/template/options.php:313
184
- msgid "Minify all CSS styles"
185
- msgstr ""
186
-
187
- #. Text in echo
188
- #: speed-booster-pack/inc/template/options.php:35
189
- msgid "Move scripts to the footer"
190
- msgstr ""
191
-
192
- #. Text in echo
193
- #: speed-booster-pack/inc/template/options.php:289
194
- msgid ""
195
- "Note that any changes you make will only affect new images uploaded to your "
196
- "site. If you want to update all of your images with the new sizes, install "
197
- "and run the Regenerate Thumbnails plugin. As a reference, a lower level of "
198
- "compression means more performance. We recommend you choose a compression "
199
- "level between 50 and 75."
200
- msgstr ""
201
-
202
- #. Text in echo
203
- #: speed-booster-pack/inc/template/options.php:118
204
- msgid "Number of executed queries:"
205
- msgstr ""
206
-
207
- #. Text in echo
208
- #: speed-booster-pack/inc/template/options.php:106
209
- msgid "Page loading time in seconds:"
210
- msgstr ""
211
-
212
- #. Text in echo
213
- #: speed-booster-pack/inc/template/options.php:131
214
- msgid "Peak Memory Used:"
215
- msgstr ""
216
-
217
- #. Text in echo
218
- #: speed-booster-pack/inc/template/options.php:195
219
- msgid "Read more"
220
- msgstr ""
221
-
222
- #. Text in echo
223
- #: speed-booster-pack/inc/template/options.php:399
224
- msgid "Read online plugin documentation"
225
- msgstr ""
226
-
227
- #. Text in echo
228
- #: speed-booster-pack/inc/template/options.php:423
229
- msgid "Released date:"
230
- msgstr ""
231
-
232
- #. Text in echo
233
- #: speed-booster-pack/inc/template/options.php:81
234
- msgid "Remove Adjacent Posts Links"
235
- msgstr ""
236
-
237
- #. Text in echo
238
- #: speed-booster-pack/inc/template/options.php:71
239
- msgid "Remove RSD Link"
240
- msgstr ""
241
-
242
- #. Text in echo
243
- #: speed-booster-pack/inc/template/options.php:86
244
- msgid "Remove Windows Manifest"
245
- msgstr ""
246
-
247
- #. Text in echo
248
- #: speed-booster-pack/inc/template/options.php:76
249
- msgid "Remove WordPress Shortlink"
250
- msgstr ""
251
-
252
- #. Text in echo
253
- #: speed-booster-pack/inc/template/options.php:96
254
- msgid "Remove all rss feed links"
255
- msgstr ""
256
-
257
- #. Text in echo
258
- #: speed-booster-pack/inc/template/options.php:67
259
- msgid "Remove junk header tags"
260
- msgstr ""
261
-
262
- #. Text in echo
263
- #: speed-booster-pack/inc/template/options.php:50
264
- msgid "Remove query strings"
265
- msgstr ""
266
-
267
- #. Text in echo
268
- #: speed-booster-pack/inc/template/options.php:91
269
- msgid "Remove the WordPress Version"
270
- msgstr ""
271
-
272
- #. Text in echo
273
- #: speed-booster-pack/inc/template/options.php:60
274
- msgid "Removes extra Font Awesome styles"
275
- msgstr ""
276
-
277
- #. Text in echo
278
- #: speed-booster-pack/inc/template/options.php:149
279
- #: speed-booster-pack/inc/template/options.php:206
280
- msgid "Script Handle"
281
- msgstr ""
282
-
283
- #. Text in echo
284
- #: speed-booster-pack/inc/template/options.php:207
285
- msgid "Script Path"
286
- msgstr ""
287
-
288
- #. Text in echo
289
- #: speed-booster-pack/inc/template/options.php:299
290
- msgid "Still need more speed?"
291
- msgstr ""
292
-
293
- #. Text in echo
294
- #: speed-booster-pack/inc/template/options.php:286
295
- msgid ""
296
- "The default image compression setting in WordPress is 90%. Compressing your "
297
- "images further than the default will make your file sizes even smaller and "
298
- "will boost your site performance."
299
- msgstr ""
300
-
301
- #. Text in echo
302
- #: speed-booster-pack/inc/template/options.php:405
303
- msgid "Version Information"
304
- msgstr ""
305
-
306
- #. Text in echo
307
- #: speed-booster-pack/inc/template/options.php:389
308
- msgid "What do these settings mean?"
309
- msgstr ""
310
-
311
- #. Text in echo
312
- #: speed-booster-pack/inc/template/options.php:195
313
- msgid "detailed instructions"
314
- msgstr ""
315
-
316
- #. Text in echo
317
- #: speed-booster-pack/inc/template/options.php:195
318
- msgid "on this option on plugin documentation."
319
- msgstr ""
320
-
321
- #. Text in echo
322
- #: speed-booster-pack/inc/template/options.php:126
323
- msgid "q"
324
- msgstr ""
325
-
326
- #. Text in echo
327
- #: speed-booster-pack/inc/template/options.php:114
328
- msgid "s"
329
- msgstr ""
330
-
331
- #. Text in echo
332
- #: speed-booster-pack/inc/template/options.php:368
333
- msgid ""
334
- "this option will eliminate render-blocking CSS warning in Google Page Speed "
335
- "test. If there is something broken after activation, you need to disable "
336
- "this option. Please note that before enabling this sensitive option, it is "
337
- "strongly recommended that you also enable the \"Move scripts to the footer\" "
338
- "option."
339
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/sb-pack.pot DELETED
@@ -1,339 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Content-Type: text/plain; charset=UTF-8\n"
4
- "Content-Transfer-Encoding: 8bit\n"
5
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
6
- "Project-Id-Version: Speed Booster Pack\n"
7
- "POT-Creation-Date: \n"
8
- "PO-Revision-Date: \n"
9
- "Last-Translator: Liviu Costache <tiguan@tiguandesign.com>\n"
10
- "Language-Team: Tiguandesign.com <tiguan@tiguandesign.com>\n"
11
- "MIME-Version: 1.0\n"
12
- "Language: en\n"
13
- "X-Generator: Poedit 1.6.7\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "X-Poedit-KeywordsList: _e;__\n"
16
- "X-Poedit-Basepath: .\n"
17
- "X-Poedit-SearchPath-0: ..\n"
18
- "X-Poedit-SearchPath-1: ...\n"
19
-
20
- #. Text in echo
21
- #: speed-booster-pack/inc/template/options.php:399
22
- msgid " with guidelines to enhance your website performance."
23
- msgstr ""
24
-
25
- #. Text in echo
26
- #: speed-booster-pack/inc/template/options.php:360
27
- msgid "*The list may be incomplete in some circumstances."
28
- msgstr ""
29
-
30
- #. Text in echo
31
- #: speed-booster-pack/inc/template/options.php:132
32
- msgid "Active Plugins:"
33
- msgstr ""
34
-
35
- #. Text in echo
36
- #: speed-booster-pack/inc/template/options.php:367
37
- msgid "Additional information:"
38
- msgstr ""
39
-
40
- #. Text in echo
41
- #: speed-booster-pack/inc/template/options.php:342
42
- msgid ""
43
- "As a guidance, here is a list of css handles of each enqueued style detected "
44
- "by our plugin:"
45
- msgstr ""
46
-
47
- #. Text in echo
48
- #: speed-booster-pack/inc/template/options.php:200
49
- msgid ""
50
- "As a guidance, here is a list of script handles and script paths of each "
51
- "enqueued script detected by our plugin:"
52
- msgstr ""
53
-
54
- #. Text in echo
55
- #: speed-booster-pack/inc/template/options.php:19
56
- msgid "Boost Your Website Speed!"
57
- msgstr ""
58
-
59
- #. Text in echo
60
- #: speed-booster-pack/inc/template/options.php:348
61
- msgid "CSS Handle"
62
- msgstr ""
63
-
64
- #. Text in echo
65
- #: speed-booster-pack/inc/template/options.php:265
66
- msgid "Change the default image compression level"
67
- msgstr ""
68
-
69
- #. Text in echo
70
- #: speed-booster-pack/inc/template/options.php:277
71
- msgid "Compression level:"
72
- msgstr ""
73
-
74
- #. Text in echo
75
- #: speed-booster-pack/inc/template/options.php:172
76
- msgid "Copy the HTML code of the script from your page source and add it below"
77
- msgstr ""
78
-
79
- #. Text in echo
80
- #: speed-booster-pack/inc/template/options.php:45
81
- msgid "Defer parsing of javascript files"
82
- msgstr ""
83
-
84
- #. Text in echo
85
- #: speed-booster-pack/inc/template/options.php:325
86
- msgid "Disable all above CSS options on mobile devices"
87
- msgstr ""
88
-
89
- #. Text in echo
90
- #: speed-booster-pack/inc/template/options.php:333
91
- msgid ""
92
- "Enter one by line, the handles of css files or the final part of the style "
93
- "URL. For example: <code>font-awesome</code> or <code>font-awesome.min.css</"
94
- "code>"
95
- msgstr ""
96
-
97
- #. Text in echo
98
- #: speed-booster-pack/inc/template/options.php:257
99
- msgid ""
100
- "Enter one by text field, the final part of the js files that you want to be "
101
- "excluded from defer parsing option. For example: <code>jquery.min.js</code> "
102
- "If you want to exclude more than 4 scripts, your page score will be hit and "
103
- "therefore the use of \"Defer parsing of javascript files\" option will "
104
- "become useless so you can disable it"
105
- msgstr ""
106
-
107
- #. Text in echo
108
- #: speed-booster-pack/inc/template/options.php:195
109
- msgid ""
110
- "Enter one js handle per text field, in the left area and the corespondent "
111
- "html script in the right text fields."
112
- msgstr ""
113
-
114
- #. Text in echo
115
- #: speed-booster-pack/inc/template/options.php:233
116
- msgid "Exclude scripts from being deferred"
117
- msgstr ""
118
-
119
- #. Text in echo
120
- #: speed-booster-pack/inc/template/options.php:143
121
- msgid "Exclude scripts from being moved to the footer"
122
- msgstr ""
123
-
124
- #. Text in echo
125
- #: speed-booster-pack/inc/template/options.php:330
126
- msgid "Exclude styles from asynchronously option: "
127
- msgstr ""
128
-
129
- #. Text in echo
130
- #: speed-booster-pack/inc/template/options.php:23
131
- msgid "General options"
132
- msgstr ""
133
-
134
- #. Text in echo
135
- #: speed-booster-pack/inc/template/options.php:104
136
- msgid "Home Page Load Stats"
137
- msgstr ""
138
-
139
- #. Text in echo
140
- #: speed-booster-pack/inc/template/options.php:195
141
- msgid ""
142
- "If you want to exclude more than 4 scripts, your page score will be hit and "
143
- "therefore the use of \"Move scripts to footer\" option will become useless "
144
- "so you can disable it."
145
- msgstr ""
146
-
147
- #. Text in echo
148
- #: speed-booster-pack/inc/template/options.php:320
149
- msgid "Insert all CSS styles inline to the footer"
150
- msgstr ""
151
-
152
- #. Text in echo
153
- #: speed-booster-pack/inc/template/options.php:368
154
- msgid "Insert all CSS styles inline to the footer: "
155
- msgstr ""
156
-
157
- #. Text in echo
158
- #: speed-booster-pack/inc/template/options.php:416
159
- msgid "Installed Version:"
160
- msgstr ""
161
-
162
- #. Text in echo
163
- #: speed-booster-pack/inc/template/options.php:55
164
- msgid "Lazy load images to improve speed"
165
- msgstr ""
166
-
167
- #. Text in echo
168
- #: speed-booster-pack/inc/template/options.php:305
169
- msgid "Load CSS asynchronously"
170
- msgstr ""
171
-
172
- #. Text in echo
173
- #: speed-booster-pack/inc/template/options.php:40
174
- msgid "Load JS from Google Libraries"
175
- msgstr ""
176
-
177
- #. Text in echo
178
- #: speed-booster-pack/inc/template/options.php:31
179
- msgid "Main plugin options"
180
- msgstr ""
181
-
182
- #. Text in echo
183
- #: speed-booster-pack/inc/template/options.php:313
184
- msgid "Minify all CSS styles"
185
- msgstr ""
186
-
187
- #. Text in echo
188
- #: speed-booster-pack/inc/template/options.php:35
189
- msgid "Move scripts to the footer"
190
- msgstr ""
191
-
192
- #. Text in echo
193
- #: speed-booster-pack/inc/template/options.php:289
194
- msgid ""
195
- "Note that any changes you make will only affect new images uploaded to your "
196
- "site. If you want to update all of your images with the new sizes, install "
197
- "and run the Regenerate Thumbnails plugin. As a reference, a lower level of "
198
- "compression means more performance. We recommend you choose a compression "
199
- "level between 50 and 75."
200
- msgstr ""
201
-
202
- #. Text in echo
203
- #: speed-booster-pack/inc/template/options.php:118
204
- msgid "Number of executed queries:"
205
- msgstr ""
206
-
207
- #. Text in echo
208
- #: speed-booster-pack/inc/template/options.php:106
209
- msgid "Page loading time in seconds:"
210
- msgstr ""
211
-
212
- #. Text in echo
213
- #: speed-booster-pack/inc/template/options.php:131
214
- msgid "Peak Memory Used:"
215
- msgstr ""
216
-
217
- #. Text in echo
218
- #: speed-booster-pack/inc/template/options.php:195
219
- msgid "Read more"
220
- msgstr ""
221
-
222
- #. Text in echo
223
- #: speed-booster-pack/inc/template/options.php:399
224
- msgid "Read online plugin documentation"
225
- msgstr ""
226
-
227
- #. Text in echo
228
- #: speed-booster-pack/inc/template/options.php:423
229
- msgid "Released date:"
230
- msgstr ""
231
-
232
- #. Text in echo
233
- #: speed-booster-pack/inc/template/options.php:81
234
- msgid "Remove Adjacent Posts Links"
235
- msgstr ""
236
-
237
- #. Text in echo
238
- #: speed-booster-pack/inc/template/options.php:71
239
- msgid "Remove RSD Link"
240
- msgstr ""
241
-
242
- #. Text in echo
243
- #: speed-booster-pack/inc/template/options.php:86
244
- msgid "Remove Windows Manifest"
245
- msgstr ""
246
-
247
- #. Text in echo
248
- #: speed-booster-pack/inc/template/options.php:76
249
- msgid "Remove WordPress Shortlink"
250
- msgstr ""
251
-
252
- #. Text in echo
253
- #: speed-booster-pack/inc/template/options.php:96
254
- msgid "Remove all rss feed links"
255
- msgstr ""
256
-
257
- #. Text in echo
258
- #: speed-booster-pack/inc/template/options.php:67
259
- msgid "Remove junk header tags"
260
- msgstr ""
261
-
262
- #. Text in echo
263
- #: speed-booster-pack/inc/template/options.php:50
264
- msgid "Remove query strings"
265
- msgstr ""
266
-
267
- #. Text in echo
268
- #: speed-booster-pack/inc/template/options.php:91
269
- msgid "Remove the WordPress Version"
270
- msgstr ""
271
-
272
- #. Text in echo
273
- #: speed-booster-pack/inc/template/options.php:60
274
- msgid "Removes extra Font Awesome styles"
275
- msgstr ""
276
-
277
- #. Text in echo
278
- #: speed-booster-pack/inc/template/options.php:149
279
- #: speed-booster-pack/inc/template/options.php:206
280
- msgid "Script Handle"
281
- msgstr ""
282
-
283
- #. Text in echo
284
- #: speed-booster-pack/inc/template/options.php:207
285
- msgid "Script Path"
286
- msgstr ""
287
-
288
- #. Text in echo
289
- #: speed-booster-pack/inc/template/options.php:299
290
- msgid "Still need more speed?"
291
- msgstr ""
292
-
293
- #. Text in echo
294
- #: speed-booster-pack/inc/template/options.php:286
295
- msgid ""
296
- "The default image compression setting in WordPress is 90%. Compressing your "
297
- "images further than the default will make your file sizes even smaller and "
298
- "will boost your site performance."
299
- msgstr ""
300
-
301
- #. Text in echo
302
- #: speed-booster-pack/inc/template/options.php:405
303
- msgid "Version Information"
304
- msgstr ""
305
-
306
- #. Text in echo
307
- #: speed-booster-pack/inc/template/options.php:389
308
- msgid "What do these settings mean?"
309
- msgstr ""
310
-
311
- #. Text in echo
312
- #: speed-booster-pack/inc/template/options.php:195
313
- msgid "detailed instructions"
314
- msgstr ""
315
-
316
- #. Text in echo
317
- #: speed-booster-pack/inc/template/options.php:195
318
- msgid "on this option on plugin documentation."
319
- msgstr ""
320
-
321
- #. Text in echo
322
- #: speed-booster-pack/inc/template/options.php:126
323
- msgid "q"
324
- msgstr ""
325
-
326
- #. Text in echo
327
- #: speed-booster-pack/inc/template/options.php:114
328
- msgid "s"
329
- msgstr ""
330
-
331
- #. Text in echo
332
- #: speed-booster-pack/inc/template/options.php:368
333
- msgid ""
334
- "this option will eliminate render-blocking CSS warning in Google Page Speed "
335
- "test. If there is something broken after activation, you need to disable "
336
- "this option. Please note that before enabling this sensitive option, it is "
337
- "strongly recommended that you also enable the \"Move scripts to the footer\" "
338
- "option."
339
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,206 +1,246 @@
1
- === Speed Booster Pack ===
2
- Contributors: machothemes
3
- Donate link:
4
- Tags: speed, optimization, performance, scripts to the footer, google libraries, font awesome cdn, defer parsing of javascript, remove query strings, lazy load images, gtmetrix, google pageSpeed, yslow, eliminate external render-blocking javascript and css, compression, async, render-blocking css
5
- Requires at least: 3.6
6
- Tested up to: 4.9
7
- Stable tag: 3.6.1
8
- License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
-
11
- A light, frequently updated and easy to use plugin to make your site load faster and score higher on Google PSI.
12
-
13
- == Description ==
14
-
15
- **Speed Booster Pack is a lightweight, frequently updated, easy to use and well supported plugin which allows you to improve your website's loading speed.**
16
-
17
- Improving your site's speed will get you a better score on major speed testing services such as [Google PageSpeed](http://developers.google.com/speed/pagespeed/insights/), [GTmetrix](http://gtmetrix.com/), [YSlow](https://developer.yahoo.com/yslow/), [Pingdom](http://tools.pingdom.com/fpt/), [Webpagetest](http://www.webpagetest.org/) and will also improve your overall site's usability. This will persuade Google and other search engines to rank your site higher in search results thus sending more traffic.
18
-
19
- = Why Site Speed Is Important? =
20
-
21
- Visitors usually close a website if it doesn't load in a few seconds and the slower a site loads the greater the chances are that the visitors will leave. And you don't want that to happen, do you? :-)
22
- Speed Booster Pack is a plugin that can help you speed up your website by tweaking different options.
23
-
24
- = Main Plugin Features =
25
-
26
- * **Eliminate external render-blocking javascript and css** in above-the-fold content.
27
- * **Move scripts to the footer** to improve page loading speed.
28
- * **Load CSS asynchronously** to render your page more quickly and get a higher score on the major speed testing services.
29
- * **Minify and inline all CSS styles and move them to the footer** to eliminate external render-blocking CSS and optimize CSS delivery.
30
- * ** Minify HTML and JavaScript to increase your page load speed.
31
- * **Lazy loads images** to improve page load times and save bandwidth.
32
- * **Change image compression level** to keep file sizes smaller; Change JPG quality.
33
- * **Load javascript files from Google Libraries** rather than serving them from your WordPress install directly, to reduce latency, increase parallelism and improve browser caching.
34
- * **Defer parsing of javascript files** to reduce the initial load time of your page.
35
- * **Remove query strings from static resources** to improve your speed scores.
36
- * **Remove extra Font Awesome stylesheets** added to your theme by certain plugins, if *Font Awesome* is already used in your theme.
37
- * **Remove junk header tags** to clean up your WordPress Header.
38
- * **Display page loading time** in the plugin options page.
39
- * **Display the number of executed SQL queries** in the plugin options page.
40
- * **Display the Peak Memory Used** in the plugin options page.
41
- * **Exclude scripts** from being moved to the footer or defered.
42
- * **Remove RSD Link** if you are not using a Weblog Client or some 3rd party sites/programs that use the XML-RPC request formats.
43
- * **Remove WordPress Shortlink**
44
- * **Remove the WordPress Version** this option is added for security reasons and cleaning the header.
45
- * **Remove all rss feed links** to cleanup your WordPress header.
46
-
47
- * For complete usage instructions visit [Plugin Documentation](http://docs.machothemes.com/category/118-speed-booster)
48
-
49
- A short video about how Speed Booster pack can help actually increase a website's score in Google PageSpeed Insights:
50
-
51
- https://www.youtube.com/watch?v=u0G6pk2mX4M
52
-
53
- Future Development:
54
-
55
- * Enable compression option.
56
- * Leverage browser caching.
57
- * Option to disable specific plugin actions on specific pages directly via the page edit screen metabox.
58
- * Option to keep specific scripts in the header, since there are many javascript-based plugins scripts, that rely on jQuery to be loaded prior to the HTML elements.
59
-
60
- = Recommended Plugins =
61
-
62
- * [Simple Author Box](http://wordpress.org/plugins/simple-author-box/) - A simple but cool author box with social icons.
63
-
64
- **About us:**
65
- We are a young team of WordPress aficionados who love building WordPress plugins & <a href="https://www.machothemes.com/" target="_blank" title="Premium WordPress themes">Premium WordPress themes</a> over on our theme shop. We’re also blogging and wish to help our users find the <a href="https://www.machothemes.com/blog/best-cheap-wordpress-hosting/" target="_blank" title="Best Cheap WordPress Hosting">Best Cheap WordPress Hosting</a> available on the market. Check out our blog.
66
-
67
-
68
- == Installation ==
69
-
70
- 1. Download the plugin (.zip file) on your hard drive.
71
- 2. Unzip the zip file contents.
72
- 3. Upload the `speed-booster-pack` folder to the `/wp-content/plugins/` directory.
73
- 4. Activate the plugin through the 'Plugins' menu in WordPress.
74
- 5. A new sub menu item `Speed Booster Pack` will appear in your main Settings menu.
75
-
76
- == Screenshots ==
77
- 1. Plugin options page, simple view (v2.5)
78
-
79
- == Changelog ==
80
- = 3.6.1 =
81
- * Added a section for feedback in the plugin's dashboard
82
-
83
- = 3.6 =
84
- * Changed contributors and fixed a few bugs. Plugin is now under new ownership.
85
-
86
- = 3.5 =
87
- * Fix compatibility with the CrazyLazy plugin.
88
-
89
- = 3.4 =
90
- * Added an option to increase your page load speed by minifying JavaScript and HTML. Removed option to remove RSD Link, since its impact on improving speed was insignificant.
91
-
92
- = 3.3 =
93
- * Fix Lazy Load CSS problem.
94
-
95
- = 3.2 =
96
- * Added Lazy Load feature to improve the web page loading times of your images.
97
-
98
- = 3.1 =
99
- * Following requests from users, added back the option of excluding javascript elements.
100
-
101
- = 3.0 =
102
- * We removed the option of excluding javascript elements as this option falls page speed score, making this plugin almost useless. Also, these options were only for advanced users, for regular users, incorrect use these options could destabilize the entire site functionality.
103
- * We also removed the lazy load images option because it was outdated and broken. We'll come up with a new and updated solution soon.
104
-
105
- = 2.9 =
106
- * Added a new recommended features that can make your site load faster
107
-
108
- = 2.8 =
109
- * Fixed plugin options visibility issue
110
-
111
- = 2.7 =
112
- * All important options switched to off by default (on first plugin activation).
113
-
114
- = 2.6 =
115
- * Added Spanish translation by [Andrew Kurtis](http://www.webhostinghub.com/)
116
-
117
- = 2.5 =
118
- * Added option to exclude certain JS files from being moved to the footer.
119
- * Added option to exclude certain JS files from being defered.
120
- * Added a list of handles of all scripts and styles enqueued by your theme, useful for excluding options.
121
- * Removed FOUC option since is useless with W3 Total Cache.
122
- * Some visual changes on plugin options page.
123
- * Translation updated with the new strings.
124
- * Moved some admin inline scripts to js files.
125
-
126
- = 2.4 =
127
- * Fixed TypeError: $ is not a function when Prevent Flash of Unstyled Content (FOUC) option is active. Thanks to [@Marcio Duarte](http://profiles.wordpress.org/pagelab) for the [bug report](http://wordpress.org/support/topic/javascript-error-53).
128
-
129
- = 2.3 =
130
- * Added option to exclude certain CSS files from being loaded asynchronously.
131
- * Changed the position of the styles when they are inlined to the footer (before js files).
132
- * Added an experimental option to eliminate flash of unstyled content (FOUC) when all CSS styles are inlined to the footer.
133
- * Translations updated.
134
-
135
- = 2.2 =
136
- * Fixed option to disable all CSS Async features on mobile devices.
137
- * Fixed incompatibility with WPtouch plugin. Thanks to [@DevilIce](http://profiles.wordpress.org/devilice) for the [bug report](http://wordpress.org/support/topic/css-asynchronously-and-wptouch-issue).
138
- * Updated function wp_is_mobile() on lazy load images to really disabled this feature on mobile devices.
139
-
140
- = 2.1 =
141
- *Added an option to disable all CSS Async features on mobile devices, to avoid some appearance issues until finding a clean solution to fix it.
142
-
143
- = 2.0 =
144
- *Modified: amended previous except for the admin toolbar css to enqueue its stylesheets only if admin bar is showing, to not break the render blocking plugin option.
145
-
146
- = 1.9 =
147
- * Fix: breaking the SEO by Yoast plugin interface (perhaps as well as to others too). Thanks to [@JahLive](http://profiles.wordpress.org/jahlive) for the [bug report](http://wordpress.org/support/topic/yoast-wordpress-seo-broken-after-update).
148
- * Added an except for the admin toolbar css since the Load CSS asynchronously option removes its dashicons and stylesheets.
149
-
150
-
151
- = 1.8 =
152
- * Added option to load CSS asynchronously to render your page more quickly and get a higher score on the major speed testing services
153
- * Added option to inline and minify all CSS styles and move them to the header or to the footer, to eliminate external render-blocking CSS and optimize CSS delivery.
154
- * Added option to change the default image compression level, to help your pages load faster and keep file sizes smaller.
155
- * Added memory usage information and active plugins number in the plugin options page.
156
- * Replaced PHP version info with memory usage information (more useful).
157
- * Added Romanian translation and POT file. Translators are welcome!
158
-
159
- = 1.7 =
160
- * Fixed Lazy Load missed js.
161
-
162
- = 1.6 =
163
- * Fixed some errors and missed codes from plugin functions.
164
-
165
- = 1.5 =
166
- * Added Lazy Load feature to improve the web page loading times of your images.
167
- * Added an option to remove all rss feed links from WP Head.
168
- * Added plugin options informations to the footer, visible in page source(hidden in front end), useful for debugging.
169
-
170
- = 1.4 =
171
- * Added a new option to remove extra Font Awesome stylesheets added to your theme by certain plugins, if Font Awesome is already used in your theme.
172
- * Added a new option to remove WordPress Version Number.
173
-
174
- = 1.3 =
175
- * Fixed strict standards error: redefining already defined constructor for class.
176
-
177
- = 1.2 =
178
- * Modified the plugin version number variable in plugin options page.
179
-
180
- = 1.1 =
181
- * Modified Readme file
182
-
183
- = 1.0 =
184
- * Initial release
185
-
186
- == Page Load Stats ==
187
-
188
- Page Load Stats is a brief statistic displayed in the plugin options page. It displays your homepage loading speed (in seconds) and number of processed queries.
189
-
190
- **Page loading time** – the progress bar color will be:
191
-
192
- * *green* if the page load takes less than a second
193
- * *orange* when loading the page takes between 1 and 2 seconds
194
- * *red* if the page loading takes longer than 2 seconds
195
-
196
- **Number of executed queries** the progress bar color will be:
197
-
198
- * *green* if there were less than 100 queries
199
- * *orange* if there were between 100 and 200 queries
200
- * *red* if the page required more than 200 queries
201
-
202
- == Credits ==
203
-
204
- * Thanks to [Jason Penney](http://jasonpenney.net/) for Google Libraries feature.
205
- * CSS option was implemented from Async JS and CSS plugin and updated to our plugin.
206
- * Credits for Lazy Load feature belongs to [pluginkollektiv](https://github.com/pluginkollektiv/crazy-lazy)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Speed Booster Pack ===
2
+ Contributors: machothemes, silkalns
3
+ Tags: speed, optimization, performance, scripts to the footer, google libraries, font awesome cdn, defer parsing of javascript, remove query strings, gtmetrix, google pageSpeed, yslow, compression, render-blocking css
4
+ Requires at least: 3.6
5
+ Tested up to: 4.9
6
+ Requires PHP: 5.6
7
+ Stable tag: 3.7.3
8
+ License: GPLv3 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
+
11
+ A light, frequently updated and easy to use plugin to make your site load faster and score higher on Google PSI.
12
+
13
+ == Description ==
14
+
15
+ A short video about how Speed Booster pack can help actually increase a website's score in Google PageSpeed Insights:
16
+
17
+ https://www.youtube.com/watch?v=u0G6pk2mX4M
18
+
19
+ **Speed Booster Pack is a lightweight, frequently updated, easy to use and well supported plugin which allows you to improve your website's loading speed.**
20
+
21
+ Improving your site's speed will get you a better score on major speed testing services such as [Google PageSpeed](http://developers.google.com/speed/pagespeed/insights/), [GTmetrix](http://gtmetrix.com/), [YSlow](https://developer.yahoo.com/yslow/), [Pingdom](http://tools.pingdom.com/fpt/), [Webpagetest](http://www.webpagetest.org/) and will also improve your overall site's usability. This will persuade Google and other search engines to rank your site higher in search results thus sending more traffic.
22
+
23
+ = Why Site Speed Is Important? =
24
+
25
+ Visitors usually close a website if it doesn't load in a few seconds and the slower a site loads the greater the chances are that the visitors will leave. And you don't want that to happen, do you? :-)
26
+ Speed Booster Pack is a plugin that can help you speed up your website by tweaking different options.
27
+
28
+ = Main Plugin Features =
29
+
30
+ * **Eliminate external render-blocking javascript and css** in above-the-fold content.
31
+ * **Move scripts to the footer** to improve page loading speed.
32
+ * **Load CSS asynchronously** to render your page more quickly and get a higher score on the major speed testing services.
33
+ * **Minify and inline all CSS styles and move them to the footer** to eliminate external render-blocking CSS and optimize CSS delivery.
34
+ * ** Minify HTML and JavaScript to increase your page load speed.
35
+ * **Change image compression level** to keep file sizes smaller; Change JPG quality.
36
+ * **Load javascript files from Google Libraries** rather than serving them from your WordPress install directly, to reduce latency, increase parallelism and improve browser caching.
37
+ * **Defer parsing of javascript files** to reduce the initial load time of your page.
38
+ * **Remove query strings from static resources** to improve your speed scores.
39
+ * **Remove extra Font Awesome stylesheets** added to your theme by certain plugins, if *Font Awesome* is already used in your theme.
40
+ * **Remove junk header tags** to clean up your WordPress Header.
41
+ * **Display page loading time** in the plugin options page.
42
+ * **Display the number of executed SQL queries** in the plugin options page.
43
+ * **Display the Peak Memory Used** in the plugin options page.
44
+ * **Exclude scripts** from being moved to the footer or defered.
45
+ * **Remove RSD Link** if you are not using a Weblog Client or some 3rd party sites/programs that use the XML-RPC request formats.
46
+ * **Remove WordPress Shortlink**
47
+ * **Remove the WordPress Version** this option is added for security reasons and cleaning the header.
48
+ * **Remove all rss feed links** to cleanup your WordPress header.
49
+
50
+ * For complete usage instructions visit [Plugin Documentation](http://docs.machothemes.com/category/118-speed-booster)
51
+
52
+
53
+ Future Development:
54
+
55
+ * Enable compression option.
56
+ * Leverage browser caching.
57
+ * Option to disable specific plugin actions on specific pages directly via the page edit screen metabox.
58
+ * Option to keep specific scripts in the header, since there are many javascript-based plugins scripts, that rely on jQuery to be loaded prior to the HTML elements.
59
+
60
+ = Recommended Plugins =
61
+
62
+ * [Simple Author Box](http://wordpress.org/plugins/simple-author-box/) - A simple but cool author box with social icons.
63
+
64
+ **About us:**
65
+ We are a young team of WordPress aficionados who love building WordPress plugins & <a href="https://www.machothemes.com/" target="_blank" title="Premium WordPress themes">Premium WordPress themes</a> over on our theme shop. We’re also blogging and wish to help our users find the <a href="https://www.machothemes.com/blog/best-cheap-wordpress-hosting/" target="_blank" title="Best Cheap WordPress Hosting">Best Cheap WordPress Hosting</a> available on the market. Check out our blog.
66
+
67
+
68
+ == Installation ==
69
+
70
+ 1. Download the plugin (.zip file) on your hard drive.
71
+ 2. Unzip the zip file contents.
72
+ 3. Upload the `speed-booster-pack` folder to the `/wp-content/plugins/` directory.
73
+ 4. Activate the plugin through the 'Plugins' menu in WordPress.
74
+ 5. A new sub menu item `Speed Booster Pack` will appear in your main Settings menu.
75
+
76
+ == Screenshots ==
77
+ 1. Plugin options page, simple view (v2.5)
78
+
79
+ == Changelog ==
80
+
81
+ = 3.7.3 =
82
+ * minor backend tweaks
83
+
84
+ = 3.7.2 =
85
+ * minor tweaks & version bump
86
+ * removed ShortPixel aff integration
87
+
88
+ = 3.7.1 =
89
+ * Temporarily remove lazyLoad as the bundled JS files, namely, CrazyLazy don't seem to be working properly with the latest jQuery version.
90
+
91
+ = 3.7 =
92
+
93
+ * Bumped FontAwesome bundled CSS version from 4.1 -> 4.7 and changed to using MaxCDN
94
+ * (Hopefully) fixed the issue affecting relative/absolute paths when using minify CSS
95
+ * Wrongfully used escape functions
96
+ * Should use wp_scripts-> done instead of wp_scripts->queue
97
+ * Update Use Google Libraries 3rd party dependency
98
+ * Can't be fully translated because of one wrong text-domain string
99
+ * Change UI to WordPress Core UI
100
+ * Added plugin uninstall feedback
101
+ * Added plugin (dedicated) support tab && moved plugin feedback section only to support tab
102
+ * Added tooltips to all fields
103
+ * Re-worked the page load / site stats bar & added a bit more info
104
+ * Removed the old way of handling the uninstall hook & deletion of the sbp_integer variable from SBP when you uninstall it. In case you change your mind & reactivate the plugin, your former image compression value's there waiting for you.
105
+ * Addressed a small issue with the "Exclude scripts from being moved to footer" display
106
+ * Made all of the plugin's link send to MachoTheme's docs instead of Tiguan
107
+ * Updated jQuery UI CSS to latest version & included the PNG sprites that come by default with jQuery UI, eliminating some back-end "asset not found" errors
108
+ * Removed unused files
109
+ * Added feature: "Remove Emoji scripts"
110
+ * Added feature: "Disable XML-RPC" pings
111
+ * Added default values. Now it's even easier to get speed boosts without actually having to toggle stuff
112
+ * Removed po/mo files from SBP since translations are now handled here: https://translate.wordpress.org/projects/wp-plugins/speed-booster-pack
113
+ * jQuery will always be enqueued in the header, as a security/fallback measure.
114
+ * Fixed the way "exclude scripts from footer" works. It's now usable and only requires the script handle. Added backwards compat as well
115
+ * Fixed the way script deferring works, it's now actually usable. Introduced a filter: sbp_exclude_defer_scripts so users can exclude more than 4 scripts from being deferred
116
+ * Rewrote the way the plugin was handling removal of query strings from assets
117
+ * Automatically exclude certain known CSS assets from being async/minifed and/or moved from header (ex: dashicons / admin-bar)
118
+ * Full list of changes for v3.7, here: https://github.com/MachoThemes/speed-booster-pack/milestone/1?closed=1
119
+
120
+ = 3.6.1 =
121
+ * Added a section for feedback in the plugin's dashboard
122
+
123
+ = 3.6 =
124
+ * Changed contributors and fixed a few bugs. Plugin is now under new ownership.
125
+
126
+ = 3.5 =
127
+ * Fix compatibility with the CrazyLazy plugin.
128
+
129
+ = 3.4 =
130
+ * Added an option to increase your page load speed by minifying JavaScript and HTML. Removed option to remove RSD Link, since its impact on improving speed was insignificant.
131
+
132
+ = 3.3 =
133
+ * Fix Lazy Load CSS problem.
134
+
135
+ = 3.2 =
136
+ * Added Lazy Load feature to improve the web page loading times of your images.
137
+
138
+ = 3.1 =
139
+ * Following requests from users, added back the option of excluding javascript elements.
140
+
141
+ = 3.0 =
142
+ * We removed the option of excluding javascript elements as this option falls page speed score, making this plugin almost useless. Also, these options were only for advanced users, for regular users, incorrect use these options could destabilize the entire site functionality.
143
+ * We also removed the lazy load images option because it was outdated and broken. We'll come up with a new and updated solution soon.
144
+
145
+ = 2.9 =
146
+ * Added a new recommended features that can make your site load faster
147
+
148
+ = 2.8 =
149
+ * Fixed plugin options visibility issue
150
+
151
+ = 2.7 =
152
+ * All important options switched to off by default (on first plugin activation).
153
+
154
+ = 2.6 =
155
+ * Added Spanish translation by [Andrew Kurtis](http://www.webhostinghub.com/)
156
+
157
+ = 2.5 =
158
+ * Added option to exclude certain JS files from being moved to the footer.
159
+ * Added option to exclude certain JS files from being defered.
160
+ * Added a list of handles of all scripts and styles enqueued by your theme, useful for excluding options.
161
+ * Removed FOUC option since is useless with W3 Total Cache.
162
+ * Some visual changes on plugin options page.
163
+ * Translation updated with the new strings.
164
+ * Moved some admin inline scripts to js files.
165
+
166
+ = 2.4 =
167
+ * Fixed TypeError: $ is not a function when Prevent Flash of Unstyled Content (FOUC) option is active. Thanks to [@Marcio Duarte](http://profiles.wordpress.org/pagelab) for the [bug report](http://wordpress.org/support/topic/javascript-error-53).
168
+
169
+ = 2.3 =
170
+ * Added option to exclude certain CSS files from being loaded asynchronously.
171
+ * Changed the position of the styles when they are inlined to the footer (before js files).
172
+ * Added an experimental option to eliminate flash of unstyled content (FOUC) when all CSS styles are inlined to the footer.
173
+ * Translations updated.
174
+
175
+ = 2.2 =
176
+ * Fixed option to disable all CSS Async features on mobile devices.
177
+ * Fixed incompatibility with WPtouch plugin. Thanks to [@DevilIce](http://profiles.wordpress.org/devilice) for the [bug report](http://wordpress.org/support/topic/css-asynchronously-and-wptouch-issue).
178
+ * Updated function wp_is_mobile() on lazy load images to really disabled this feature on mobile devices.
179
+
180
+ = 2.1 =
181
+ *Added an option to disable all CSS Async features on mobile devices, to avoid some appearance issues until finding a clean solution to fix it.
182
+
183
+ = 2.0 =
184
+ *Modified: amended previous except for the admin toolbar css to enqueue its stylesheets only if admin bar is showing, to not break the render blocking plugin option.
185
+
186
+ = 1.9 =
187
+ * Fix: breaking the SEO by Yoast plugin interface (perhaps as well as to others too). Thanks to [@JahLive](http://profiles.wordpress.org/jahlive) for the [bug report](http://wordpress.org/support/topic/yoast-wordpress-seo-broken-after-update).
188
+ * Added an except for the admin toolbar css since the Load CSS asynchronously option removes its dashicons and stylesheets.
189
+
190
+
191
+ = 1.8 =
192
+ * Added option to load CSS asynchronously to render your page more quickly and get a higher score on the major speed testing services
193
+ * Added option to inline and minify all CSS styles and move them to the header or to the footer, to eliminate external render-blocking CSS and optimize CSS delivery.
194
+ * Added option to change the default image compression level, to help your pages load faster and keep file sizes smaller.
195
+ * Added memory usage information and active plugins number in the plugin options page.
196
+ * Replaced PHP version info with memory usage information (more useful).
197
+ * Added Romanian translation and POT file. Translators are welcome!
198
+
199
+ = 1.7 =
200
+ * Fixed Lazy Load missed js.
201
+
202
+ = 1.6 =
203
+ * Fixed some errors and missed codes from plugin functions.
204
+
205
+ = 1.5 =
206
+ * Added Lazy Load feature to improve the web page loading times of your images.
207
+ * Added an option to remove all rss feed links from WP Head.
208
+ * Added plugin options informations to the footer, visible in page source(hidden in front end), useful for debugging.
209
+
210
+ = 1.4 =
211
+ * Added a new option to remove extra Font Awesome stylesheets added to your theme by certain plugins, if Font Awesome is already used in your theme.
212
+ * Added a new option to remove WordPress Version Number.
213
+
214
+ = 1.3 =
215
+ * Fixed strict standards error: redefining already defined constructor for class.
216
+
217
+ = 1.2 =
218
+ * Modified the plugin version number variable in plugin options page.
219
+
220
+ = 1.1 =
221
+ * Modified Readme file
222
+
223
+ = 1.0 =
224
+ * Initial release
225
+
226
+ == Page Load Stats ==
227
+
228
+ Page Load Stats is a brief statistic displayed in the plugin options page. It displays your homepage loading speed (in seconds) and number of processed queries.
229
+
230
+ **Page loading time** – the progress bar color will be:
231
+
232
+ * *green* if the page load takes less than a second
233
+ * *orange* when loading the page takes between 1 and 2 seconds
234
+ * *red* if the page loading takes longer than 2 seconds
235
+
236
+ **Number of executed queries** – the progress bar color will be:
237
+
238
+ * *green* if there were less than 100 queries
239
+ * *orange* if there were between 100 and 200 queries
240
+ * *red* if the page required more than 200 queries
241
+
242
+ == Credits ==
243
+
244
+ * Thanks to [Jason Penney](http://jasonpenney.net/) for Google Libraries feature.
245
+ * CSS option was implemented from Async JS and CSS plugin and updated to our plugin.
246
+ * Credits for Lazy Load feature belongs to [pluginkollektiv](https://github.com/pluginkollektiv/crazy-lazy)
speed-booster-pack.php CHANGED
@@ -1,291 +1,281 @@
1
- <?php
2
- /**
3
- * Plugin Name: Speed Booster Pack
4
- * Plugin URI: http://wordpress.org/plugins/speed-booster-pack/
5
- * Description: Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major speed testing services such as <a href="http://gtmetrix.com/">GTmetrix</a>, <a href="http://developers.google.com/speed/pagespeed/insights/">Google PageSpeed</a> or other speed testing tools.
6
- * Version: 3.6.1
7
- * Author: Macho Themes
8
- * Author URI: https://www.machothemes.com/
9
- * License: GPLv2
10
- */
11
-
12
- /* Copyright 2017 Macho Themes (email : support [at] machothemes [dot] com)
13
-
14
- THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
15
- IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
16
- THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
17
- (AT YOUR OPTION) ANY LATER VERSION.
18
-
19
- THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
20
- BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
21
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE
22
- GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.
23
-
24
- YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
25
- ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE FREE SOFTWARE
26
- FOUNDATION, INC., 51 FRANKLIN ST, FIFTH FLOOR, BOSTON, MA 02110-1301 USA
27
- */
28
-
29
- /*----------------------------------------------------------------------------------------------------------
30
- Global Variables
31
- -----------------------------------------------------------------------------------------------------------*/
32
-
33
- $sbp_options = get_option( 'sbp_settings' ); // retrieve the plugin settings from the options table
34
-
35
- /*----------------------------------------------------------------------------------------------------------
36
- Define some useful plugin constants
37
- -----------------------------------------------------------------------------------------------------------*/
38
-
39
- define( 'SPEED_BOOSTER_PACK_RELEASE_DATE', date_i18n( 'F j, Y', strtotime('2017-08-21')) ); // Defining plugin release date
40
- define( 'SPEED_BOOSTER_PACK_PATH', plugin_dir_path( __FILE__ ) ); // Defining plugin dir path
41
- define( 'SPEED_BOOSTER_PACK_VERSION', 'v3.6.1'); // Defining plugin version
42
- define( 'SPEED_BOOSTER_PACK_NAME', 'Speed Booster Pack Plugin'); // Defining plugin name
43
- define( 'SBP_FOOTER', 10 ); // Defining css position
44
- define( 'SBP_FOOTER_LAST', 99999 ); // Defining css last position
45
-
46
-
47
- /*----------------------------------------------------------------------------------------------------------
48
- Main Plugin Class
49
- -----------------------------------------------------------------------------------------------------------*/
50
-
51
- if ( !class_exists( 'Speed_Booster_Pack' ) ) {
52
-
53
- class Speed_Booster_Pack {
54
-
55
- /*----------------------------------------------------------------------------------------------------------
56
- Function Construct
57
- -----------------------------------------------------------------------------------------------------------*/
58
-
59
- public function __construct() {
60
- global $sbp_options;
61
-
62
- // Enqueue admin scripts
63
- add_action( 'admin_enqueue_scripts', array( $this, 'sbp_admin_enqueue_scripts' ) );
64
- add_action( 'admin_enqueue_scripts', array( $this, 'sbp_collapsible' ) );
65
-
66
- // load plugin textdomain
67
- add_action('plugins_loaded', array( $this, 'sbp_load_translation' ) );
68
-
69
- add_action('admin_notices', array( &$this, 'sbp_display_notices'));
70
- add_action('wp_ajax_sbp_dismiss_notices', array(&$this, 'sbp_dismiss_notices'));
71
-
72
- // Load plugin settings page
73
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/settings.php' );
74
- $Speed_Booster_Pack_Options = new Speed_Booster_Pack_Options();
75
-
76
- // Load main plugin functions
77
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/core.php' );
78
- $Speed_Booster_Pack_Core = new Speed_Booster_Pack_Core();
79
-
80
- // Enqueue admin style
81
- add_action( 'admin_enqueue_scripts', array( $this, 'sbp_enqueue_styles' ) );
82
-
83
- if ( isset( $sbp_options['lazy_load'] ) ) {
84
- add_action('wp_head', array( $this, 'sbp_fade_in_style' ), 100);
85
- }
86
-
87
- // Render debugging information
88
- add_action( 'wp_footer', array( $this, 'sbp_debugg' ), SBP_FOOTER_LAST );
89
-
90
- // Filters
91
- $this->path = plugin_basename( __FILE__ );
92
- add_filter( "plugin_action_links_$this->path", array( $this, 'sbp_settings_link' ) );
93
-
94
- } // END public function __construct
95
-
96
-
97
- /*----------------------------------------------------------------------------------------------------------
98
- Load plugin textdomain
99
- -----------------------------------------------------------------------------------------------------------*/
100
-
101
- function sbp_load_translation() {
102
- load_plugin_textdomain( 'sb-pack', false, SPEED_BOOSTER_PACK_PATH . '/lang/' );
103
- }
104
-
105
-
106
- /*----------------------------------------------------------------------------------------------------------
107
- Display/dismiss admin notices if needed
108
- -----------------------------------------------------------------------------------------------------------*/
109
-
110
- function sbp_display_notices() {
111
- if(!get_option( 'sbp_news')) {
112
- global $sbp_settings_page;
113
- $screen = get_current_screen();
114
- if ( $screen->id != $sbp_settings_page ) {
115
- require_once( SPEED_BOOSTER_PACK_PATH . 'inc/template/notice.php' );
116
- }
117
- }
118
- }
119
-
120
- function sbp_dismiss_notices() {
121
- update_option( 'sbp_news', true);
122
- return json_encode(array("Status" => 0));
123
- }
124
-
125
- /*----------------------------------------------------------------------------------------------------------
126
- Activate the plugin
127
- -----------------------------------------------------------------------------------------------------------*/
128
-
129
- public static function sbp_activate() {
130
-
131
- $sbp_options = get_option( 'sbp_settings', '' );
132
- $timer_stop = timer_stop( 0, 2 );
133
- $get_num_queries = get_num_queries();
134
-
135
- $url = get_site_url();
136
- $response = wp_remote_get( $url, array() );
137
-
138
- $get_enqueued_scripts_handle = get_option( 'all_theme_scripts_handle' );
139
- $get_enqueued_scripts_src = get_option( 'all_theme_scripts_src' );
140
- $get_enqueued_styles_handle = get_option( 'all_theme_styles_handle' );
141
-
142
- if ( get_option('sbp_page_time') == '' ) {
143
- update_option( 'sbp_page_time', $timer_stop );
144
- }
145
-
146
- if ( get_option( 'sbp_page_queries') == '' ) {
147
- update_option( 'sbp_page_queries', $get_num_queries );
148
- }
149
-
150
- if ( get_option( 'all_theme_scripts_handle') == '' ) {
151
- update_option( 'all_theme_scripts_handle', $get_enqueued_scripts_handle );
152
- }
153
-
154
- if ( get_option( 'all_theme_scripts_src') == '' ) {
155
- update_option( 'all_theme_scripts_src', $get_enqueued_scripts_src );
156
- }
157
-
158
- if ( get_option( 'all_theme_styles_handle') == '' ) {
159
- update_option( 'all_theme_styles_handle', $get_enqueued_styles_handle );
160
- }
161
-
162
-
163
- if ( get_option('sbp_css_async' ) === FALSE ) {
164
- update_option( 'sbp_css_async', 1 );
165
- update_option( 'sbp_css_minify', 1 );
166
- update_option( 'sbp_footer_css', 0 );
167
- update_option( 'sbp_is_mobile', 0 );
168
- }
169
-
170
- } // END public static function sb_activate
171
-
172
-
173
- /*----------------------------------------------------------------------------------------------------------
174
- Deactivate the plugin
175
- -----------------------------------------------------------------------------------------------------------*/
176
-
177
- public static function sbp_deactivate() {
178
- delete_option( 'sbp_integer' );
179
- }
180
-
181
-
182
- /*-----------------------------------------------------------------------------------------------------------------------------------------
183
- Add a small css to activate a fade-in effect on lazy load images & wll be also used to output some frontend css in future development
184
- --------------------------------------------------------------------------------------------------------------------------------------------*/
185
-
186
- public function sbp_fade_in_style() {
187
- echo "<style>img.crazy_lazy {opacity:0}</style>";
188
- }
189
-
190
-
191
- /*----------------------------------------------------------------------------------------------------------
192
- CSS style of the plugin options page
193
- -----------------------------------------------------------------------------------------------------------*/
194
-
195
- function sbp_enqueue_styles( $hook ) {
196
-
197
- // load stylesheet only on plugin options page
198
- global $sbp_settings_page;
199
- if ( $hook != $sbp_settings_page )
200
- return;
201
- wp_enqueue_style( 'sbp-styles', plugin_dir_url( __FILE__ ) . 'css/style.dev.css' ); // change to style.dev.css to debug the plugin style sbp_style.min
202
- wp_enqueue_style( 'jquery-ui', plugin_dir_url( __FILE__ ) . 'css/jquery-ui.min.css' );
203
-
204
- } // End function sbp_enqueue_styles
205
-
206
-
207
- /*----------------------------------------------------------------------------------------------------------
208
- Enqueue admin scripts to plugin options page
209
- -----------------------------------------------------------------------------------------------------------*/
210
-
211
- public function sbp_admin_enqueue_scripts( $hook_sbp ) {
212
- // load scripts only on plugin options page
213
- global $sbp_settings_page;
214
- if ( $hook_sbp != $sbp_settings_page )
215
- return;
216
- wp_enqueue_script( 'jquery-ui-slider' );
217
- wp_enqueue_script( 'sbp-slide', plugins_url('inc/js/sbp-slide.js', __FILE__ ), array( 'jquery', 'jquery-ui-slider' ), SPEED_BOOSTER_PACK_VERSION, true );
218
- wp_enqueue_script( 'sbp-hide', plugins_url('inc/js/sbp-hide.js', __FILE__ ), array( 'jquery' ), SPEED_BOOSTER_PACK_VERSION, true );
219
-
220
- }
221
-
222
-
223
- /*----------------------------------------------------------------------------------------------------------
224
- Enqueue script to plugin options page for collapsible options
225
- -----------------------------------------------------------------------------------------------------------*/
226
-
227
- function sbp_collapsible( $sbp_suffix ) {
228
- global $sbp_settings_page;
229
- if ( $sbp_suffix != $sbp_settings_page )
230
- return;
231
- wp_enqueue_script( 'postbox' );
232
- wp_enqueue_script( 'postbox-edit', plugins_url('inc/js/post-tabs-edit.js', __FILE__ ), array( 'jquery', 'postbox' ) );
233
- }
234
-
235
-
236
- /*----------------------------------------------------------------------------------------------------------
237
- Add settings link on plugins page
238
- -----------------------------------------------------------------------------------------------------------*/
239
-
240
- function sbp_settings_link( $links ) {
241
-
242
- $settings_link = '<a href="options-general.php?page=sbp-options">Settings</a>';
243
- array_unshift( $links, $settings_link );
244
- return $links;
245
-
246
- } // End function sbp_settings_link
247
-
248
-
249
- /*----------------------------------------------------------------------------------------------------------
250
- Render the plugin name, its version and active options in page source, useful for debugging
251
- -----------------------------------------------------------------------------------------------------------*/
252
-
253
- function sbp_debugg() {
254
-
255
- global $sbp_options;
256
-
257
- echo '<!-- We need this for debugging themes using ' . SPEED_BOOSTER_PACK_NAME . ' ' . SPEED_BOOSTER_PACK_VERSION . ' -->' . "\n";
258
-
259
- if ( isset( $sbp_options['jquery_to_footer'] ) ) {
260
- echo '<!-- Scripts to footer: enabled -->' . "\n";
261
- }
262
-
263
- if ( isset( $sbp_options['sbp_footer_css'] ) ) {
264
- echo '<!-- CSS to footer: enabled -->' . "\n";
265
- }
266
-
267
- if ( isset( $sbp_options['defer_parsing'] ) ) {
268
- echo '<!-- Defer parsing of js: enabled -->' . "\n";
269
- }
270
-
271
- if ( isset( $sbp_options['sbp_css_async'] ) ) {
272
- echo '<!-- CSS Async: enabled -->' . "\n";
273
- }
274
-
275
-
276
- } // End function sbp_debugg
277
-
278
- } // End class Speed_Booster_Pack
279
-
280
- } // End if (!class_exists("Speed_Booster_Pack")) (1)
281
-
282
- if( class_exists( 'Speed_Booster_Pack' ) ) {
283
-
284
- // Installation and uninstallation hooks
285
- register_activation_hook( __FILE__, array( 'Speed_Booster_Pack', 'sbp_activate' ) );
286
- register_deactivation_hook( __FILE__, array( 'Speed_Booster_Pack', 'sbp_deactivate' ) );
287
-
288
- // instantiate the plugin class
289
- $speed_booster_pack = new Speed_Booster_Pack();
290
-
291
- } // End if (!class_exists("Speed_Booster_Pack")) (2)
1
+ <?php
2
+ /**
3
+ * Plugin Name: Speed Booster Pack
4
+ * Plugin URI: http://wordpress.org/plugins/speed-booster-pack/
5
+ * Description: Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major
6
+ * speed testing services such as <a href="http://gtmetrix.com/">GTmetrix</a>, <a
7
+ * href="http://developers.google.com/speed/pagespeed/insights/">Google PageSpeed</a> or other speed testing tools.
8
+ * Version: 3.7.3
9
+ * Author: Macho Themes
10
+ * Author URI: https://www.machothemes.com/
11
+ * License: GPLv3
12
+ */
13
+
14
+ /* Copyright 2018 Macho Themes (email : support [at] machothemes [dot] com)
15
+
16
+ THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
17
+ IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
18
+ THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
19
+ (AT YOUR OPTION) ANY LATER VERSION.
20
+
21
+ THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
22
+ BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
23
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE
24
+ GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.
25
+
26
+ YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
27
+ ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE FREE SOFTWARE
28
+ FOUNDATION, INC., 51 FRANKLIN ST, FIFTH FLOOR, BOSTON, MA 02110-1301 USA
29
+ */
30
+
31
+
32
+ //@todo: rework the CSS Async functionality
33
+ //@todo: fix lazyLoad with WooCommerce <- it actually works flawlessly, it doesn't seem to work with AO and/or Cloudflare hosted CSS
34
+ //@todo: add system info menu page
35
+ //@todo: automatically collapse accordeons on "advanced" tab
36
+
37
+
38
+ /*----------------------------------------------------------------------------------------------------------
39
+ Global Variables
40
+ -----------------------------------------------------------------------------------------------------------*/
41
+
42
+ /**
43
+ * Default plugin values
44
+ *
45
+ * @since 3.7
46
+ */
47
+ $sbp_defaults = array(
48
+ 'remove_emojis' => 1, // remove emoji scripts
49
+ 'remove_wsl' => 1, // remove WSL link in header
50
+ 'remove_adjacent' => 1, // remove post adjacent links
51
+ 'wml_link' => 1, // remove Windows Manifest Live link
52
+ 'rsd_link' => 1, // remove really simple discovery
53
+ 'wp_generator' => 1, // remove WP version
54
+ 'remove_all_feeds' => 1, // remove all WP feeds
55
+ 'disable_xmlrpc' => 1, // disable XML-RPC pingbacks
56
+ 'font_awesome' => 1, // remove extra font awesome styles
57
+ 'query_strings' => 1, // remove query strings
58
+ 'use_google_libs' => 1, // serve JS assets (when possible) from Google CDN
59
+ );
60
+
61
+ $sbp_options = get_option( 'sbp_settings', (array) $sbp_defaults ); // retrieve the plugin settings from the options table
62
+
63
+ /*----------------------------------------------------------------------------------------------------------
64
+ Define some useful plugin constants
65
+ -----------------------------------------------------------------------------------------------------------*/
66
+
67
+ define( 'SPEED_BOOSTER_PACK_PATH', plugin_dir_path( __FILE__ ) ); // Defining plugin dir path
68
+ define( 'SPEED_BOOSTER_PACK_VERSION', '3.7.3' ); // Defining plugin version
69
+ define( 'SBP_FOOTER', 10 ); // Defining css position
70
+ define( 'SBP_FOOTER_LAST', 99999 ); // Defining css last position
71
+
72
+ /*----------------------------------------------------------------------------------------------------------
73
+ Main Plugin Class
74
+ -----------------------------------------------------------------------------------------------------------*/
75
+
76
+ if ( ! class_exists( 'Speed_Booster_Pack' ) ) {
77
+
78
+ class Speed_Booster_Pack {
79
+
80
+ /*----------------------------------------------------------------------------------------------------------
81
+ Function Construct
82
+ -----------------------------------------------------------------------------------------------------------*/
83
+
84
+ public function __construct() {
85
+ global $sbp_options;
86
+
87
+ // Enqueue admin scripts
88
+ add_action( 'admin_enqueue_scripts', array( $this, 'sbp_admin_enqueue_scripts' ) );
89
+
90
+ /**
91
+ * Should remain disabled until we release wpspeedbooster.com
92
+ *
93
+ * @since: 3.7
94
+ *
95
+ */
96
+ //add_action( 'wp_dashboard_setup', [ $this, 'sbp_load_dashboard_widget' ] );
97
+
98
+
99
+ // load plugin textdomain
100
+ add_action( 'plugins_loaded', array( $this, 'sbp_load_translation' ) );
101
+
102
+ add_action( 'admin_notices', array( &$this, 'sbp_display_notices' ) );
103
+ add_action( 'wp_ajax_sbp_dismiss_notices', array( &$this, 'sbp_dismiss_notices' ) );
104
+
105
+ // Load plugin settings page
106
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/settings.php' );
107
+ $Speed_Booster_Pack_Options = new Speed_Booster_Pack_Options();
108
+
109
+ // Load main plugin functions
110
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/core.php' );
111
+ $Speed_Booster_Pack_Core = new Speed_Booster_Pack_Core();
112
+
113
+ // Enqueue admin style
114
+ add_action( 'admin_enqueue_scripts', array( $this, 'sbp_enqueue_styles' ) );
115
+
116
+
117
+ // Filters
118
+ $this->path = plugin_basename( __FILE__ );
119
+ add_filter( "plugin_action_links_$this->path", array( $this, 'sbp_settings_link' ) );
120
+
121
+ // load the uninstall feedback class
122
+ require_once 'feedback/class-epsilon-feedback.php';
123
+ new Epsilon_Feedback( __FILE__ );
124
+
125
+ } // END public function __construct
126
+
127
+
128
+ function sbp_load_dashboard_widget() {
129
+
130
+ require_once plugin_dir_path( __FILE__ ) . 'widgets/dashboard-widget.php';
131
+
132
+ }
133
+
134
+ /*----------------------------------------------------------------------------------------------------------
135
+ Load plugin textdomain
136
+ -----------------------------------------------------------------------------------------------------------*/
137
+
138
+ function sbp_load_translation() {
139
+ load_plugin_textdomain( 'sb-pack', false, SPEED_BOOSTER_PACK_PATH . '/lang/' );
140
+ }
141
+
142
+
143
+ /*----------------------------------------------------------------------------------------------------------
144
+ Display/dismiss admin notices if needed
145
+ -----------------------------------------------------------------------------------------------------------*/
146
+
147
+ function sbp_display_notices() {
148
+ if ( ! get_option( 'sbp_news' ) ) {
149
+ global $sbp_settings_page;
150
+ $screen = get_current_screen();
151
+ if ( $screen->id != $sbp_settings_page ) {
152
+ require_once( SPEED_BOOSTER_PACK_PATH . 'inc/template/notice.php' );
153
+ }
154
+ }
155
+ }
156
+
157
+ function sbp_dismiss_notices() {
158
+ update_option( 'sbp_news', true );
159
+
160
+ return json_encode( array( "Status" => 0 ) );
161
+ }
162
+
163
+ /*----------------------------------------------------------------------------------------------------------
164
+ Activate the plugin
165
+ -----------------------------------------------------------------------------------------------------------*/
166
+
167
+ public static function sbp_activate() {
168
+
169
+ $sbp_options = get_option( 'sbp_settings', '' );
170
+ $timer_stop = timer_stop( 0, 2 );
171
+ $get_num_queries = get_num_queries();
172
+
173
+ $url = get_site_url();
174
+ $response = wp_remote_get( $url, array() );
175
+
176
+ $get_enqueued_scripts_handle = get_option( 'all_theme_scripts_handle' );
177
+ $get_enqueued_scripts_src = get_option( 'all_theme_scripts_src' );
178
+ $get_enqueued_styles_handle = get_option( 'all_theme_styles_handle' );
179
+
180
+ if ( get_option( 'sbp_page_time' ) == '' ) {
181
+ update_option( 'sbp_page_time', $timer_stop );
182
+ }
183
+
184
+ if ( get_option( 'sbp_page_queries' ) == '' ) {
185
+ update_option( 'sbp_page_queries', $get_num_queries );
186
+ }
187
+
188
+ if ( get_option( 'all_theme_scripts_handle' ) == '' ) {
189
+ update_option( 'all_theme_scripts_handle', $get_enqueued_scripts_handle );
190
+ }
191
+
192
+ if ( get_option( 'all_theme_scripts_src' ) == '' ) {
193
+ update_option( 'all_theme_scripts_src', $get_enqueued_scripts_src );
194
+ }
195
+
196
+ if ( get_option( 'all_theme_styles_handle' ) == '' ) {
197
+ update_option( 'all_theme_styles_handle', $get_enqueued_styles_handle );
198
+ }
199
+
200
+ } // END public static function sb_activate
201
+
202
+
203
+ /*----------------------------------------------------------------------------------------------------------
204
+ Deactivate the plugin
205
+ -----------------------------------------------------------------------------------------------------------*/
206
+
207
+ public static function sbp_deactivate() {
208
+ }
209
+
210
+
211
+ /*----------------------------------------------------------------------------------------------------------
212
+ CSS style of the plugin options page
213
+ -----------------------------------------------------------------------------------------------------------*/
214
+
215
+ function sbp_enqueue_styles( $hook ) {
216
+
217
+ // load stylesheet only on plugin options page
218
+ global $sbp_settings_page;
219
+ if ( $hook != $sbp_settings_page ) {
220
+ return;
221
+ }
222
+ wp_enqueue_style( 'sbp-styles', plugin_dir_url( __FILE__ ) . 'css/style.css' );
223
+ wp_enqueue_style( 'jquery-ui', plugin_dir_url( __FILE__ ) . 'css/vendors/jquery-ui/jquery-ui.min.css' );
224
+
225
+ } // End function sbp_enqueue_styles
226
+
227
+
228
+ /*----------------------------------------------------------------------------------------------------------
229
+ Enqueue admin scripts to plugin options page
230
+ -----------------------------------------------------------------------------------------------------------*/
231
+
232
+ public function sbp_admin_enqueue_scripts( $hook_sbp ) {
233
+ // load scripts only on plugin options page
234
+ global $sbp_settings_page;
235
+ if ( $hook_sbp != $sbp_settings_page ) {
236
+ return;
237
+ }
238
+ wp_enqueue_script( 'jquery-ui-slider' );
239
+ wp_enqueue_script( 'postbox' );
240
+
241
+ wp_enqueue_script( 'sbp-admin-scripts', plugins_url( 'inc/js/admin-scripts.js', __FILE__ ), array(
242
+ 'jquery',
243
+ 'postbox',
244
+ 'jquery-ui-slider',
245
+ ), SPEED_BOOSTER_PACK_VERSION, true );
246
+
247
+ wp_enqueue_script( 'sbp-plugin-install', plugins_url( 'inc/js/plugin-install.js', __FILE__ ), array(
248
+ 'jquery',
249
+ 'updates',
250
+ ), SPEED_BOOSTER_PACK_VERSION, true );
251
+
252
+ }
253
+
254
+
255
+ /*----------------------------------------------------------------------------------------------------------
256
+ Add settings link on plugins page
257
+ -----------------------------------------------------------------------------------------------------------*/
258
+
259
+ function sbp_settings_link( $links ) {
260
+
261
+ $settings_link = ' <a href="admin.php?page=sbp-options">Settings</a > ';
262
+ array_unshift( $links, $settings_link );
263
+
264
+ return $links;
265
+
266
+ } // End function sbp_settings_link
267
+ }// End class Speed_Booster_Pack
268
+ } // End if (!class_exists("Speed_Booster_Pack")) (1)
269
+
270
+ if ( class_exists( 'Speed_Booster_Pack' ) ) {
271
+
272
+ // Installation and uninstallation hooks
273
+ register_activation_hook( __FILE__, array( 'Speed_Booster_Pack', 'sbp_activate' ) );
274
+ register_deactivation_hook( __FILE__, array( 'Speed_Booster_Pack', 'sbp_deactivate' ) );
275
+
276
+ // instantiate the plugin class
277
+ $speed_booster_pack = new Speed_Booster_Pack();
278
+
279
+ } // End if (!class_exists("Speed_Booster_Pack")) (2)
280
+
281
+ // make sure to update the path to where you cloned the projects to!
 
 
 
 
 
 
 
 
 
 
widgets/dashboard-widget.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?Php
2
+
3
+ // WordPress Events and News
4
+ wp_add_dashboard_widget( 'sbp_dashboard_primary', __( 'Speed Booster Pack Overview' ), 'sbp_dashboard_events_news' );
5
+
6
+
7
+ /**
8
+ * Renders the Events and News dashboard widget.
9
+ *
10
+ * @since 3.7
11
+ */
12
+ function sbp_dashboard_events_news() {
13
+
14
+ ?>
15
+
16
+ <div class="wordpress-news hide-if-no-js">
17
+ <?php sbp_dashboard_widget(); ?>
18
+ </div>
19
+
20
+
21
+ <!--
22
+ <p class="community-events-footer">
23
+ see this:
24
+ - https://github.com/WordPress/WordPress/blob/921e131eae45801b8fdb1ecfceb5d7839fdfd509/wp-admin/includes/dashboard.php#L1124-L1159
25
+ - https://codex.wordpress.org/Dashboard_Widgets_API#Advanced:_Forcing_your_widget_to_the_top
26
+
27
+ </p>
28
+ -->
29
+
30
+ <?php
31
+ }
32
+
33
+
34
+ /**
35
+ * 'WordPress Events and News' dashboard widget.
36
+ *
37
+ * @since 3.7
38
+ */
39
+ function sbp_dashboard_widget() {
40
+ $feeds = array(
41
+ 'news' => array(
42
+ 'link' => apply_filters( 'sbp_dashboard_primary_link', __( 'https://www.machothemes.com/' ) ),
43
+ 'url' => apply_filters( 'sbp_dashboard_primary_feed', __( 'https://www.machothemes.com/blog/feed/' ) ),
44
+ 'title' => apply_filters( 'sbp_dashboard_primary_title', __( 'Speed Booster Pack Overview' ) ),
45
+ 'items' => 3,
46
+ 'show_summary' => 1,
47
+ 'show_author' => 0,
48
+ 'show_date' => 0,
49
+ ),
50
+ );
51
+
52
+ sbp_dashboard_primary_output( 'sbp_dashboard_primary', $feeds );
53
+ }
54
+
55
+ /**
56
+ * Display the WordPress events and news feeds.
57
+ *
58
+ * @since 3.7
59
+ *
60
+ * @param string $widget_id Widget ID.
61
+ * @param array $feeds Array of RSS feeds.
62
+ */
63
+ function sbp_dashboard_primary_output( $widget_id, $feeds ) {
64
+ foreach ( $feeds as $type => $args ) {
65
+ $args['type'] = $type;
66
+ echo '<div class="rss-widget">';
67
+ wp_widget_rss_output( $args['url'], $args );
68
+ echo '</div>';
69
+ }
70
+ }