PluginProbe
Autoptimize / 2.1.2
Autoptimize v2.1.2
2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 All 107 releases
autoptimize / classes / autoptimizeConfig.php

autoptimizeConfig.php in Autoptimize 2.1.2, at classes/autoptimizeConfig.php

683 lines 30.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
4 class autoptimizeConfig {
5 private $config = null;
6 static private $instance = null;
7
8 //Singleton: private construct
9 private function __construct() {
10 if( is_admin() ) {
11 //Add the admin page and settings
12 add_action('admin_menu',array($this,'addmenu'));
13 add_action('admin_init',array($this,'registersettings'));
14
15 //Set meta info
16 if(function_exists('plugin_row_meta')) {
17 //2.8+
18 add_filter('plugin_row_meta',array($this,'setmeta'),10,2);
19 } elseif(function_exists('post_class')) {
20 //2.7
21 $plugin = plugin_basename(AUTOPTIMIZE_PLUGIN_DIR.'autoptimize.php');
22 add_filter('plugin_action_links_'.$plugin,array($this,'setmeta'));
23 }
24
25 //Clean cache?
26 if(get_option('autoptimize_cache_clean')) {
27 autoptimizeCache::clearall();
28 update_option('autoptimize_cache_clean',0);
29 }
30 }
31
32 //Add the Autoptimize Toolbar to the Admin bar
33 //(we loaded outside the verification of is_admin to also be displayed on the frontend toolbar)
34 $toolbar = new autoptimizeToolbar();
35 }
36
37 static public function instance() {
38 //Only one instance
39 if (self::$instance == null) {
40 self::$instance = new autoptimizeConfig();
41 }
42
43 return self::$instance;
44 }
45
46 public function show() {
47 ?>
48 <style>
49 /* title and button */
50 #ao_title_and_button:after {content:''; display:block; clear:both;}
51 #ao_adv_button{float:right;}
52 #ao_hide_adv:before, #ao_show_adv:before {
53 display: inline-block;
54 float: left;
55 height: 20px;
56 width: 35px;
57 background: none;
58 color: #b4b9be;
59 font: normal 20px/26px dashicons;
60 letter-spacing: -4px;
61 text-align: left;
62 speak: none;
63 -webkit-font-smoothing: antialiased;
64 -moz-osx-font-smoothing: grayscale;
65 }
66 #ao_hide_adv:before {
67 content: "\f108 \f142";
68 }
69 #ao_show_adv:before {
70 content: "\f108 \f140";
71 }
72
73 /* form */
74 .itemDetail {
75 background: #fff;
76 border: 1px solid #ccc;
77 padding: 15px;
78 margin: 15px 10px 10px 0;
79 }
80 .itemTitle {
81 margin-top: 0;
82 }
83 input[type=url]:invalid {color: red; border-color:red;} .form-table th{font-weight:100;}
84 #autoptimize_main .cb_label {display: block; padding-left: 25px; text-indent: -25px;}
85
86 /* rss block */
87 #futtta_feed ul{list-style:outside;}
88 #futtta_feed {font-size:medium; margin:0px 20px;}
89
90 /* banner + unslider */
91 .autoptimize_banner {
92 margin: 0 38px;
93 padding-bottom: 5px;
94 }
95 .autoptimize_banner ul li {
96 font-size:medium;
97 text-align:center;
98 }
99 .unslider {
100 position:relative;
101 }
102 .unslider-arrow {
103 display: block;
104 left: unset;
105 margin-top: -35px;
106 margin-left: 7px;
107 margin-right: 7px;
108 border-radius: 32px;
109 background: rgba(0, 0, 0, 0.10) no-repeat 50% 50%;
110 color: rgba(255, 255, 255, 0.8);
111 font: normal 20px/1 dashicons;
112 speak: none;
113 padding: 3px 2px 3px 4px;
114 -webkit-font-smoothing: antialiased;
115 -moz-osx-font-smoothing: grayscale;
116 }
117 .unslider-arrow:hover {
118 background-color: rgba(0, 0, 0, 0.20);
119 color: #FFF;
120 }
121 .unslider-arrow.prev {
122 padding: 3px 4px 3px 2px;
123 }
124 .unslider-arrow.next {
125 right: 0px;
126 }
127 .unslider-arrow.prev::before {
128 content: "\f341";
129 }
130 .unslider-arrow.next::before {
131 content: "\f345";
132 }
133 /* responsive stuff: hide admin-feed on smaller screens */
134 @media (min-width: 961px) {
135 #autoptimize_main {float:left;width:69%;}
136 #autoptimize_admin_feed{float:right;width:30%;display:block !important;}
137 }
138 @media (max-width: 960px) {
139 #autoptimize_main {width:100%;}
140 #autoptimize_admin_feed {width:0%;display:none !important;}
141 }
142 @media (max-width: 782px) {
143 #ao_hide_adv span, #ao_show_adv span {display: none;}
144 #ao_hide_adv,#ao_show_adv {height: 34px;padding: 4px 12px 8px 8px;}
145 #ao_hide_adv:before,#ao_show_adv:before {font-size: 25px;}
146 #autoptimize_main input[type="checkbox"] {margin-left: 10px;}
147 #autoptimize_main .cb_label {display: block; padding-left: 45px; text-indent: -45px;}
148 }
149 </style>
150
151 <div class="wrap">
152
153 <?php if (version_compare(PHP_VERSION, '5.3.0') < 0) { ?>
154 <div class="notice-error notice"><?php _e('<p><strong>You are using a very old version of PHP</strong> (5.2.x or older) which has <a href="http://blog.futtta.be/2016/03/15/why-would-you-still-be-on-php-5-2/" target="_blank">serious security and performance issues</a>. Please ask your hoster to provide you with an upgrade path to 5.6 or 7.0</p>','autoptimize'); ?></div>
155 <?php } ?>
156
157 <div id="autoptimize_main">
158 <div id="ao_title_and_button">
159 <h1 id="ao_title"><?php _e('Autoptimize Settings','autoptimize'); ?>
160 <span id="ao_adv_button">
161 <?php
162 if (get_option('autoptimize_show_adv','0')=='1') {
163 ?>
164 <a href="javascript:void(0);" id="ao_show_adv" class="button" style="display:none;"><span><?php _e("Show advanced settings","autoptimize") ?></span></a>
165 <a href="javascript:void(0);" id="ao_hide_adv" class="button"><span><?php _e("Hide advanced settings","autoptimize") ?></span></a>
166 <style>tr.ao_adv{display:table-row;} li.ao_adv{display:list-item;}</style>
167 <?php
168 $hiddenClass="";
169 } else {
170 ?>
171 <a href="javascript:void(0);" id="ao_show_adv" class="button"><span><?php _e("Show advanced settings","autoptimize") ?></span></a>
172 <a href="javascript:void(0);" id="ao_hide_adv" class="button" style="display:none;"><span><?php _e("Hide advanced settings","autoptimize") ?></span></a>
173 <?php
174 $hiddenClass="hidden ";
175 }
176 ?>
177 </span>
178 </h1>
179 </div>
180
181 <?php echo $this->ao_admin_tabs(); ?>
182
183 <form method="post" action="options.php">
184 <?php settings_fields('autoptimize'); ?>
185
186 <ul>
187
188 <li class="itemDetail">
189 <h2 class="itemTitle"><?php _e('HTML Options','autoptimize'); ?></h2>
190 <table class="form-table">
191 <tr valign="top">
192 <th scope="row"><?php _e('Optimize HTML Code?','autoptimize'); ?></th>
193 <td><input type="checkbox" id="autoptimize_html" name="autoptimize_html" <?php echo get_option('autoptimize_html')?'checked="checked" ':''; ?>/></td>
194 </tr>
195 <tr class="<?php echo $hiddenClass;?>html_sub ao_adv" valign="top">
196 <th scope="row"><?php _e('Keep HTML comments?','autoptimize'); ?></th>
197 <td><label class="cb_label"><input type="checkbox" name="autoptimize_html_keepcomments" <?php echo get_option('autoptimize_html_keepcomments')?'checked="checked" ':''; ?>/>
198 <?php _e('Enable this if you want HTML comments to remain in the page.','autoptimize'); ?></label></td>
199 </tr>
200 </table>
201 </li>
202
203 <li class="itemDetail">
204 <h2 class="itemTitle"><?php _e('JavaScript Options','autoptimize'); ?></h2>
205 <table class="form-table">
206 <tr valign="top">
207 <th scope="row"><?php _e('Optimize JavaScript Code?','autoptimize'); ?></th>
208 <td><input type="checkbox" id="autoptimize_js" name="autoptimize_js" <?php echo get_option('autoptimize_js')?'checked="checked" ':''; ?>/></td>
209 </tr>
210 <tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
211 <th scope="row"><?php _e('Force JavaScript in &lt;head&gt;?','autoptimize'); ?></th>
212 <td><label class="cb_label"><input type="checkbox" name="autoptimize_js_forcehead" <?php echo get_option('autoptimize_js_forcehead')?'checked="checked" ':''; ?>/>
213 <?php _e('Load JavaScript early, reducing the chance of JS-errors but making it render blocking. You can disable this if you\'re not aggregating inline JS and you want JS to be deferred.','autoptimize'); ?></label></td>
214 </tr>
215 <?php if (get_option('autoptimize_js_justhead')) { ?>
216 <tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
217 <th scope="row"><?php _e('Look for scripts only in &lt;head&gt;?','autoptimize'); _e(' <i>(deprecated)</i>','autoptimize'); ?></th>
218 <td><label class="cb_label"><input type="checkbox" name="autoptimize_js_justhead" <?php echo get_option('autoptimize_js_justhead')?'checked="checked" ':''; ?>/>
219 <?php _e('Mostly useful in combination with previous option when using jQuery-based templates, but might help keeping cache size under control.','autoptimize'); ?></label></td>
220 </tr>
221 <?php } ?>
222 <tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
223 <th scope="row"><?php _e('Also aggregate inline JS?','autoptimize'); ?></th>
224 <td><label class="cb_label"><input type="checkbox" name="autoptimize_js_include_inline" <?php echo get_option('autoptimize_js_include_inline')?'checked="checked" ':''; ?>/>
225 <?php _e('Check this option for Autoptimize to also aggregate JS in the HTML. If this option is not enabled, you might have to "force JavaScript in head".','autoptimize'); ?></label></td>
226 </tr>
227 <tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
228 <th scope="row"><?php _e('Exclude scripts from Autoptimize:','autoptimize'); ?></th>
229 <td><label><input type="text" style="width:100%;" name="autoptimize_js_exclude" value="<?php echo get_option('autoptimize_js_exclude',"seal.js, js/jquery/jquery.js"); ?>"/><br />
230 <?php _e('A comma-separated list of scripts you want to exclude from being optimized, for example \'whatever.js, another.js\' (without the quotes) to exclude those scripts from being aggregated and minimized by Autoptimize.','autoptimize'); ?></label></td>
231 </tr>
232 <tr valign="top" class="<?php echo $hiddenClass;?>js_sub ao_adv">
233 <th scope="row"><?php _e('Add try-catch wrapping?','autoptimize'); ?></th>
234 <td><label class="cb_label"><input type="checkbox" name="autoptimize_js_trycatch" <?php echo get_option('autoptimize_js_trycatch')?'checked="checked" ':''; ?>/>
235 <?php _e('If your scripts break because of a JS-error, you might want to try this.','autoptimize'); ?></label></td>
236 </tr>
237 </table>
238 </li>
239
240 <li class="itemDetail">
241 <h2 class="itemTitle"><?php _e('CSS Options','autoptimize'); ?></h2>
242 <table class="form-table">
243 <tr valign="top">
244 <th scope="row"><?php _e('Optimize CSS Code?','autoptimize'); ?></th>
245 <td><input type="checkbox" id="autoptimize_css" name="autoptimize_css" <?php echo get_option('autoptimize_css')?'checked="checked" ':''; ?>/></td>
246 </tr>
247 <tr class="<?php echo $hiddenClass;?>css_sub ao_adv" valign="top">
248 <th scope="row"><?php _e('Generate data: URIs for images?','autoptimize'); ?></th>
249 <td><label class="cb_label"><input type="checkbox" name="autoptimize_css_datauris" <?php echo get_option('autoptimize_css_datauris')?'checked="checked" ':''; ?>/>
250 <?php _e('Enable this to include small background-images in the CSS itself instead of as separate downloads.','autoptimize'); ?></label></td>
251 </tr>
252 <tr class="<?php echo $hiddenClass;?>css_sub ao_adv" valign="top">
253 <th scope="row"><?php _e('Remove Google Fonts?','autoptimize'); ?></th>
254 <td><label class="cb_label"><input type="checkbox" name="autoptimize_css_nogooglefont" <?php echo get_option('autoptimize_css_nogooglefont')?'checked="checked" ':''; ?>/>
255 <?php _e('Check this if you don\'t need or want Google Fonts being loaded.','autoptimize'); ?></label></td>
256 </tr>
257 <?php if (get_option('autoptimize_css_justhead')) { ?>
258 <tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
259 <th scope="row"><?php _e('Look for styles only in &lt;head&gt;?','autoptimize'); _e(' <i>(deprecated)</i>','autoptimize'); ?></th>
260 <td><label class="cb_label"><input type="checkbox" name="autoptimize_css_justhead" <?php echo get_option('autoptimize_css_justhead')?'checked="checked" ':''; ?>/>
261 <?php _e('Don\'t autoptimize CSS outside the head-section. If the cache gets big, you might want to enable this.','autoptimize'); ?></label></td>
262 </tr>
263 <?php } ?>
264 <tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
265 <th scope="row"><?php _e('Also aggregate inline CSS?','autoptimize'); ?></th>
266 <td><label class="cb_label"><input type="checkbox" name="autoptimize_css_include_inline" <?php echo get_option('autoptimize_css_include_inline','1')?'checked="checked" ':''; ?>/>
267 <?php _e('Check this option for Autoptimize to also aggregate CSS in the HTML.','autoptimize'); ?></label></td>
268 </tr>
269 <tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv">
270 <th scope="row"><?php _e('Inline and Defer CSS?','autoptimize'); ?></th>
271 <td><label class="cb_label"><input type="checkbox" name="autoptimize_css_defer" id="autoptimize_css_defer" <?php echo get_option('autoptimize_css_defer')?'checked="checked" ':''; ?>/>
272 <?php _e('Inline "above the fold CSS" while loading the main autoptimized CSS only after page load. <a href="http://wordpress.org/plugins/autoptimize/faq/" target="_blank">Check the FAQ</a> before activating this option!','autoptimize'); ?></label></td>
273 </tr>
274 <tr valign="top" class="<?php echo $hiddenClass;?>css_sub ao_adv" id="autoptimize_css_defer_inline">
275 <th scope="row"></th>
276 <td><label><textarea rows="10" cols="10" style="width:100%;" placeholder="<?php _e('Paste the above the fold CSS here.','autoptimize'); ?>" name="autoptimize_css_defer_inline"><?php echo get_option('autoptimize_css_defer_inline'); ?></textarea></label></td>
277 </tr>
278 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv css_sub">
279 <th scope="row"><?php _e('Inline all CSS?','autoptimize'); ?></th>
280 <td><label class="cb_label"><input type="checkbox" id="autoptimize_css_inline" name="autoptimize_css_inline" <?php echo get_option('autoptimize_css_inline')?'checked="checked" ':''; ?>/>
281 <?php _e('Inlining all CSS can improve performance for sites with a low pageviews/ visitor-rate, but may slow down performance otherwise.','autoptimize'); ?></label></td>
282 </tr>
283 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv css_sub">
284 <th scope="row"><?php _e('Exclude CSS from Autoptimize:','autoptimize'); ?></th>
285 <td><label><input type="text" style="width:100%;" name="autoptimize_css_exclude" value="<?php echo get_option('autoptimize_css_exclude','admin-bar.min.css, dashicons.min.css'); ?>"/><br />
286 <?php _e('A comma-separated list of CSS you want to exclude from being optimized.','autoptimize'); ?></label></td>
287 </tr>
288 </table>
289 </li>
290
291 <li class="itemDetail">
292 <h2 class="itemTitle"><?php _e('CDN Options','autoptimize'); ?></h2>
293 <table class="form-table">
294 <tr valign="top">
295 <th scope="row"><?php _e('CDN Base URL','autoptimize'); ?></th>
296 <td><label><input id="cdn_url" type="text" name="autoptimize_cdn_url" pattern="^(https?:)?\/\/([\da-z\.-]+)\.([\da-z\.]{2,6})([\/\w \.-]*)*(:\d{2,5})?\/?$" style="width:100%" value="<?php echo esc_url(get_option('autoptimize_cdn_url',''),array("http","https")); ?>" /><br />
297 <?php _e('Enter your CDN root URL to enable CDN for Autoptimized files. The URL can be http, https or protocol-relative (e.g. <code>//cdn.example.com/</code>).','autoptimize'); ?></label></td>
298 </tr>
299 </table>
300 </li>
301
302 <li class="<?php echo $hiddenClass;?>itemDetail ao_adv">
303 <h2 class="itemTitle"><?php _e('Cache Info','autoptimize'); ?></h2>
304 <table class="form-table" >
305 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
306 <th scope="row"><?php _e('Cache folder','autoptimize'); ?></th>
307 <td><?php echo htmlentities(AUTOPTIMIZE_CACHE_DIR); ?></td>
308 </tr>
309 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
310 <th scope="row"><?php _e('Can we write?','autoptimize'); ?></th>
311 <td><?php echo (autoptimizeCache::cacheavail() ? __('Yes','autoptimize') : __('No','autoptimize')); ?></td>
312 </tr>
313 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
314 <th scope="row"><?php _e('Cached styles and scripts','autoptimize'); ?></th>
315 <td><?php
316 $AOstatArr=autoptimizeCache::stats();
317 $AOcacheSize=round($AOstatArr[1]/1024);
318 echo $AOstatArr[0].__(' files, totalling ','autoptimize').$AOcacheSize.__(' Kbytes (calculated at ','autoptimize').date("H:i e", $AOstatArr[2]).')';
319 ?></td>
320 </tr>
321 <tr valign="top" class="<?php echo $hiddenClass;?>ao_adv">
322 <th scope="row"><?php _e('Save aggregated script/css as static files?','autoptimize'); ?></th>
323 <td><label class="cb_label"><input type="checkbox" name="autoptimize_cache_nogzip" <?php echo get_option('autoptimize_cache_nogzip','1')?'checked="checked" ':''; ?>/>
324 <?php _e('By default files saved are static css/js, uncheck this option if your webserver doesn\'t properly handle the compression and expiry.','autoptimize'); ?></label></td>
325 </tr>
326 </table>
327 </li>
328
329 </ul>
330
331 <input type="hidden" id="autoptimize_show_adv" name="autoptimize_show_adv" value="<?php echo get_option('autoptimize_show_adv','0'); ?>">
332
333 <p class="submit">
334 <input type="submit" class="button-secondary" value="<?php _e('Save Changes','autoptimize') ?>" />
335 <input type="submit" class="button-primary" name="autoptimize_cache_clean" value="<?php _e('Save Changes and Empty Cache','autoptimize') ?>" />
336 </p>
337
338 </form>
339 </div>
340 <div id="autoptimize_admin_feed" class="hidden">
341 <div class="autoptimize_banner hidden">
342 <ul>
343 <?php
344 if (apply_filters('autoptimize_settingsscreen_remotehttp',true)) {
345 $AO_banner=get_transient("autoptimize_banner");
346 if (empty($AO_banner)) {
347 $banner_resp = wp_remote_get("http://misc.optimizingmatters.com/autoptimize_news.html");
348 if (!is_wp_error($banner_resp)) {
349 if (wp_remote_retrieve_response_code($banner_resp)=="200") {
350 $AO_banner = wp_kses_post(wp_remote_retrieve_body($banner_resp));
351 set_transient("autoptimize_banner",$AO_banner,DAY_IN_SECONDS);
352 }
353 }
354 }
355 echo $AO_banner;
356 }
357 ?>
358 <li><?php _e("Need help? <a href='https://wordpress.org/plugins/autoptimize/faq/'>Check out the FAQ</a> or post your question on <a href='http://wordpress.org/support/plugin/autoptimize'>the support-forum</a>.","autoptimize"); ?></li>
359 <li><?php _e("Happy with Autoptimize?","autoptimize"); ?><br /><a href="<?php echo network_admin_url(); ?>plugin-install.php?tab=search&type=author&s=optimizingmatters"><?php _e("Try my other plugins!","autoptimize"); ?></a></li>
360 </ul>
361 </div>
362 <div style="margin-left:10px;margin-top:-5px;">
363 <h2>
364 <?php _e("futtta about","autoptimize") ?>
365 <select id="feed_dropdown" >
366 <option value="1"><?php _e("Autoptimize","autoptimize") ?></option>
367 <option value="2"><?php _e("WordPress","autoptimize") ?></option>
368 <option value="3"><?php _e("Web Technology","autoptimize") ?></option>
369 </select>
370 </h2>
371 <div id="futtta_feed">
372 <div id="autoptimizefeed">
373 <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_autoptimize"); ?>
374 </div>
375 <div id="wordpressfeed">
376 <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_wordpress"); ?>
377 </div>
378 <div id="webtechfeed">
379 <?php $this->getFutttaFeeds("http://feeds.feedburner.com/futtta_webtech"); ?>
380 </div>
381 </div>
382 </div>
383 <div style="float:right;margin:50px 15px;"><a href="http://blog.futtta.be/2013/10/21/do-not-donate-to-me/" target="_blank"><img width="100px" height="85px" src="<?php echo plugins_url().'/'.plugin_basename(dirname(__FILE__)).'/external/do_not_donate_smallest.png'; ?>" title="<?php _e("Do not donate for this plugin!"); ?>"></a></div>
384 </div>
385
386 <script type="text/javascript">
387 var feed = new Array;
388 feed[1]="autoptimizefeed";
389 feed[2]="wordpressfeed";
390 feed[3]="webtechfeed";
391 cookiename="autoptimize_feed";
392
393 jQuery(document).ready(function() {
394 check_ini_state();
395 jQuery('#autoptimize_admin_feed').fadeTo("slow",1).show();
396 jQuery('.autoptimize_banner').unslider({autoplay:true, delay:3500, infinite: false, arrows:{prev:'<a class="unslider-arrow prev"></a>', next:'<a class="unslider-arrow next"></a>'}}).fadeTo("slow",1).show();
397
398 jQuery( "#feed_dropdown" ).change(function() {
399 jQuery("#futtta_feed").fadeTo(0,0);
400 jQuery("#futtta_feed").fadeTo("slow",1);
401 });
402
403 jQuery( "#ao_show_adv" ).click(function() {
404 jQuery( "#ao_show_adv" ).hide();
405 jQuery( "#ao_hide_adv" ).show();
406 jQuery( ".ao_adv" ).removeClass("hidden");
407 jQuery( ".ao_adv" ).show("slow");
408 if (jQuery("#autoptimize_css").attr('checked')) {
409 jQuery(".css_sub:visible").fadeTo("fast",1);
410 if (!jQuery("#autoptimize_css_defer").attr('checked')) {
411 jQuery("#autoptimize_css_defer_inline").hide();
412 }
413 }
414 if (jQuery("#autoptimize_js").attr('checked')) {
415 jQuery(".js_sub:visible").fadeTo("fast",1);
416 }
417 check_ini_state()
418 jQuery( "input#autoptimize_show_adv" ).val("1");
419 });
420
421 jQuery( "#ao_hide_adv" ).click(function() {
422 jQuery( "#ao_hide_adv" ).hide();
423 jQuery( "#ao_show_adv" ).show();
424 jQuery( ".ao_adv" ).hide("slow");
425 jQuery( ".ao_adv" ).addClass("hidden");
426 if (!jQuery("#autoptimize_css").attr('checked')) {
427 jQuery(".css_sub:visible").fadeTo("fast",.33);
428 }
429 if (!jQuery("#autoptimize_js").attr('checked')) {
430 jQuery(".js_sub:visible").fadeTo("fast",.33);
431 }
432 check_ini_state()
433 jQuery( "input#autoptimize_show_adv" ).val("0");
434 });
435
436 jQuery( "#autoptimize_html" ).change(function() {
437 if (this.checked) {
438 jQuery(".html_sub:visible").fadeTo("fast",1);
439 } else {
440 jQuery(".html_sub:visible").fadeTo("fast",.33);
441 }
442 });
443
444 jQuery( "#autoptimize_js" ).change(function() {
445 if (this.checked) {
446 jQuery(".js_sub:visible").fadeTo("fast",1);
447 } else {
448 jQuery(".js_sub:visible").fadeTo("fast",.33);
449 }
450 });
451
452 jQuery( "#autoptimize_css" ).change(function() {
453 if (this.checked) {
454 jQuery(".css_sub:visible").fadeTo("fast",1);
455 } else {
456 jQuery(".css_sub:visible").fadeTo("fast",.33);
457 }
458 });
459
460 jQuery( "#autoptimize_css_inline" ).change(function() {
461 if (this.checked) {
462 jQuery("#autoptimize_css_defer").prop("checked",false);
463 jQuery("#autoptimize_css_defer_inline").hide("slow");
464 }
465 });
466
467 jQuery( "#autoptimize_css_defer" ).change(function() {
468 if (this.checked) {
469 jQuery("#autoptimize_css_inline").prop("checked",false);
470 jQuery("#autoptimize_css_defer_inline").show("slow");
471 } else {
472 jQuery("#autoptimize_css_defer_inline").hide("slow");
473 }
474 });
475
476 jQuery("#feed_dropdown").change(function() { show_feed(jQuery("#feed_dropdown").val()) });
477 feedid=jQuery.cookie(cookiename);
478 if(typeof(feedid) !== "string") feedid=1;
479 show_feed(feedid);
480 })
481
482 // validate cdn_url
483 var cdn_url=document.getElementById("cdn_url");
484 cdn_url_baseCSS=cdn_url.style.cssText;
485 if ("validity" in cdn_url) {
486 jQuery("#cdn_url").focusout(function (event) {
487 if (cdn_url.validity.valid) {
488 cdn_url.style.cssText=cdn_url_baseCSS;
489 } else {
490 cdn_url.style.cssText=cdn_url_baseCSS+"border:1px solid #f00;color:#f00;box-shadow: 0 0 2px #f00;";
491 }});
492 }
493
494 function check_ini_state() {
495 if (!jQuery("#autoptimize_css_defer").attr('checked')) {
496 jQuery("#autoptimize_css_defer_inline").hide();
497 }
498 if (!jQuery("#autoptimize_html").attr('checked')) {
499 jQuery(".html_sub:visible").fadeTo('fast',.33);
500 }
501 if (!jQuery("#autoptimize_css").attr('checked')) {
502 jQuery(".css_sub:visible").fadeTo('fast',.33);
503 }
504 if (!jQuery("#autoptimize_js").attr('checked')) {
505 jQuery(".js_sub:visible").fadeTo('fast',.33);
506 }
507 }
508
509 function show_feed(id) {
510 jQuery('#futtta_feed').children().hide();
511 jQuery('#'+feed[id]).show();
512 jQuery("#feed_dropdown").val(id);
513 jQuery.cookie(cookiename,id,{ expires: 365 });
514 }
515 </script>
516 </div>
517
518 <?php
519 }
520
521 public function addmenu() {
522 $hook=add_options_page(__('Autoptimize Options','autoptimize'),'Autoptimize','manage_options','autoptimize',array($this,'show'));
523 add_action( 'admin_print_scripts-'.$hook,array($this,'autoptimize_admin_scripts'));
524 add_action( 'admin_print_styles-'.$hook,array($this,'autoptimize_admin_styles'));
525 }
526
527 public function autoptimize_admin_scripts() {
528 wp_enqueue_script('jqcookie', plugins_url('/external/js/jquery.cookie.min.js', __FILE__), array('jquery'),null,true);
529 wp_enqueue_script('unslider', plugins_url('/external/js/unslider-min.js', __FILE__), array('jquery'),null,true);
530 }
531
532 public function autoptimize_admin_styles() {
533 wp_enqueue_style('unslider', plugins_url('/external/js/unslider.css', __FILE__));
534 wp_enqueue_style('unslider-dots', plugins_url('/external/js/unslider-dots.css', __FILE__));
535 }
536
537 public function registersettings() {
538 register_setting('autoptimize','autoptimize_html');
539 register_setting('autoptimize','autoptimize_html_keepcomments');
540 register_setting('autoptimize','autoptimize_js');
541 register_setting('autoptimize','autoptimize_js_exclude');
542 register_setting('autoptimize','autoptimize_js_trycatch');
543 register_setting('autoptimize','autoptimize_js_justhead');
544 register_setting('autoptimize','autoptimize_js_forcehead');
545 register_setting('autoptimize','autoptimize_js_include_inline');
546 register_setting('autoptimize','autoptimize_css');
547 register_setting('autoptimize','autoptimize_css_exclude');
548 register_setting('autoptimize','autoptimize_css_justhead');
549 register_setting('autoptimize','autoptimize_css_datauris');
550 register_setting('autoptimize','autoptimize_css_defer');
551 register_setting('autoptimize','autoptimize_css_defer_inline');
552 register_setting('autoptimize','autoptimize_css_inline');
553 register_setting('autoptimize','autoptimize_css_include_inline');
554 register_setting('autoptimize','autoptimize_css_nogooglefont');
555 register_setting('autoptimize','autoptimize_cdn_url');
556 register_setting('autoptimize','autoptimize_cache_clean');
557 register_setting('autoptimize','autoptimize_cache_nogzip');
558 register_setting('autoptimize','autoptimize_show_adv');
559 }
560
561 public function setmeta($links,$file=null) {
562 //Inspired on http://wpengineer.com/meta-links-for-wordpress-plugins/
563 //Do it only once - saves time
564 static $plugin;
565 if(empty($plugin))
566 $plugin = plugin_basename(AUTOPTIMIZE_PLUGIN_DIR.'autoptimize.php');
567
568 if($file===null) {
569 //2.7
570 $settings_link = sprintf('<a href="options-general.php?page=autoptimize">%s</a>', __('Settings'));
571 array_unshift($links,$settings_link);
572 } else {
573 //2.8
574 //If it's us, add the link
575 if($file === $plugin) {
576 $newlink = array(sprintf('<a href="options-general.php?page=autoptimize">%s</a>',__('Settings')));
577 $links = array_merge($links,$newlink);
578 }
579 }
580
581 return $links;
582 }
583
584 public function get($key) {
585 if(!is_array($this->config)) {
586 //Default config
587 $config = array('autoptimize_html' => 0,
588 'autoptimize_html_keepcomments' => 0,
589 'autoptimize_js' => 0,
590 'autoptimize_js_exclude' => "seal.js, js/jquery/jquery.js",
591 'autoptimize_js_trycatch' => 0,
592 'autoptimize_js_justhead' => 0,
593 'autoptimize_js_include_inline' => 0,
594 'autoptimize_js_forcehead' => 0,
595 'autoptimize_css' => 0,
596 'autoptimize_css_exclude' => "admin-bar.min.css, dashicons.min.css",
597 'autoptimize_css_justhead' => 0,
598 'autoptimize_css_include_inline' => 1,
599 'autoptimize_css_defer' => 0,
600 'autoptimize_css_defer_inline' => "",
601 'autoptimize_css_inline' => 0,
602 'autoptimize_css_datauris' => 0,
603 'autoptimize_css_nogooglefont' => 0,
604 'autoptimize_cdn_url' => "",
605 'autoptimize_cache_nogzip' => 1,
606 'autoptimize_show_adv' => 0
607 );
608
609 //Override with user settings
610 foreach(array_keys($config) as $name) {
611 $conf = get_option($name);
612 if($conf!==false) {
613 //It was set before!
614 $config[$name] = $conf;
615 }
616 }
617
618 //Save for next question
619 $this->config = $config;
620 }
621
622 if(isset($this->config[$key]))
623 return $this->config[$key];
624
625 return false;
626 }
627
628 private function getFutttaFeeds($url) {
629 if (apply_filters('autoptimize_settingsscreen_remotehttp',true)) {
630 $rss = fetch_feed( $url );
631 $maxitems = 0;
632
633 if ( ! is_wp_error( $rss ) ) {
634 $maxitems = $rss->get_item_quantity( 7 );
635 $rss_items = $rss->get_items( 0, $maxitems );
636 }
637 ?>
638 <ul>
639 <?php if ( $maxitems == 0 ) : ?>
640 <li><?php _e( 'No items', 'autoptimize' ); ?></li>
641 <?php else : ?>
642 <?php foreach ( $rss_items as $item ) : ?>
643 <li>
644 <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
645 title="<?php printf( __( 'Posted %s', 'autoptimize' ), $item->get_date('j F Y | g:i a') ); ?>">
646 <?php echo esc_html( $item->get_title() ); ?>
647 </a>
648 </li>
649 <?php endforeach; ?>
650 <?php endif; ?>
651 </ul>
652 <?php
653 }
654 }
655
656 // based on http://wordpress.stackexchange.com/a/58826
657 static function ao_admin_tabs(){
658 $tabs = apply_filters('autoptimize_filter_settingsscreen_tabs',array('autoptimize' => __('Main','autoptimize')));
659 $tabContent="";
660 if (count($tabs)>1) {
661 if(isset($_GET['page'])){
662 $currentId = $_GET['page'];
663 } else {
664 $currentId = "autoptimize";
665 }
666 $tabContent .= "<h2 class=\"nav-tab-wrapper\">";
667 foreach($tabs as $tabId => $tabName){
668 if($currentId == $tabId){
669 $class = " nav-tab-active";
670 } else{
671 $class = "";
672 }
673 $tabContent .= '<a class="nav-tab'.$class.'" href="?page='.$tabId.'">'.$tabName.'</a>';
674 }
675 $tabContent .= "</h2>";
676 } else {
677 $tabContent = "<hr/>";
678 }
679
680 return $tabContent;
681 }
682 }
683