author | Dan |
Mon, 02 Mar 2009 17:05:27 -0500 | |
changeset 852 | e1ce6a91469b |
parent 801 | eb8b23f11744 |
child 865 | 7f8262b2004a |
permissions | -rw-r--r-- |
1 | 1 |
<?php |
2 |
||
3 |
/* |
|
4 |
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between |
|
801
eb8b23f11744
Two big commits in one day I know, but redid password storage to use HMAC-SHA1. Consolidated much AES processing to three core methods in session that should handle everything automagically. Installation works; upgrades should. Rebranded as 1.1.6.
Dan
parents:
800
diff
changeset
|
5 |
* Version 1.1.6 (Caoineag beta 1) |
536 | 6 |
* Copyright (C) 2006-2008 Dan Fuhry |
1 | 7 |
* jsres.php - the Enano client-side runtime, a.k.a. AJAX on steroids |
8 |
* |
|
9 |
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License |
|
10 |
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
|
11 |
* |
|
12 |
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
|
13 |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. |
|
14 |
*/ |
|
15 |
||
588
20484deb89cd
Upgraded TinyMCE to 3.1.0.1. Ported a couple special pages to the componentized JS system.
Dan
parents:
587
diff
changeset
|
16 |
// define('ENANO_JS_DEBUG', 1); |
20484deb89cd
Upgraded TinyMCE to 3.1.0.1. Ported a couple special pages to the componentized JS system.
Dan
parents:
587
diff
changeset
|
17 |
|
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
18 |
// if Enano's already loaded, we've been included from a helper script |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
19 |
if ( defined('ENANO_CONFIG_FETCHED') ) |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
20 |
define('ENANO_JSRES_SETUP_ONLY', 1); |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
21 |
|
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
22 |
if ( !defined('ENANO_JSRES_SETUP_ONLY') ): |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
23 |
|
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
24 |
/** |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
25 |
* Returns a floating-point number with the current UNIX timestamp in microseconds. Defined very early because we gotta call it |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
26 |
* from very early on in the script to measure the starting time of Enano. |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
27 |
* @return float |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
28 |
*/ |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
29 |
|
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
30 |
// First check to see if something already declared this function.... it happens often. |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
31 |
if ( !function_exists('microtime_float') ) |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
32 |
{ |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
33 |
function microtime_float() |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
34 |
{ |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
35 |
list($usec, $sec) = explode(" ", microtime()); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
36 |
return ((float)$usec + (float)$sec); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
37 |
} |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
38 |
} |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
39 |
|
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
40 |
$local_start = microtime_float(); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
41 |
|
430
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
42 |
// Disable for IE, it causes problems. |
588
20484deb89cd
Upgraded TinyMCE to 3.1.0.1. Ported a couple special pages to the componentized JS system.
Dan
parents:
587
diff
changeset
|
43 |
if ( ( strstr(@$_SERVER['HTTP_USER_AGENT'], 'MSIE') || defined('ENANO_JS_DEBUG') ) && !isset($_GET['early']) ) |
430
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
44 |
{ |
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
45 |
header('HTTP/1.1 302 Redirect'); |
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
46 |
header('Location: static/enano-lib-basic.js'); |
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
47 |
exit(); |
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
48 |
} |
ec90736b9cb9
Started (but disabled) work on the new theme manager, 1.1.2 is being released with this thing halfway done.
Dan
parents:
421
diff
changeset
|
49 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
50 |
// Setup Enano |
1 | 51 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
52 |
// |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
53 |
// Determine the location of Enano as an absolute path. |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
54 |
// |
1 | 55 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
56 |
// We need to see if this is a specially marked Enano development server. You can create an Enano |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
57 |
// development server by cloning the Mercurial repository into a directory named repo, and then |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
58 |
// using symlinks to reference the original files so as to segregate unique files from non-unique |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
59 |
// and distribution-standard ones. Enano will pivot its root directory accordingly if the file |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
60 |
// .enanodev is found in the Enano root (not /repo/). |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
61 |
if ( strpos(__FILE__, '/repo/') && ( file_exists('../../.enanodev') || file_exists('../../../.enanodev') ) ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
62 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
63 |
// We have a development directory. Remove /repo/ from the picture. |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
64 |
$filename = str_replace('/repo/', '/', __FILE__); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
65 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
66 |
else |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
67 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
68 |
// Standard Enano installation |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
69 |
$filename = __FILE__; |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
70 |
} |
1 | 71 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
72 |
// ENANO_ROOT is sometimes defined by plugins like AjIM that need the constant before the Enano API is initialized |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
73 |
if ( !defined('ENANO_ROOT') ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
74 |
define('ENANO_ROOT', dirname(dirname(dirname($filename)))); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
75 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
76 |
chdir(ENANO_ROOT); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
77 |
|
613 | 78 |
// fetch only the site config |
79 |
define('ENANO_EXIT_AFTER_CONFIG', 1); |
|
80 |
require('includes/common.php'); |
|
81 |
||
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
82 |
endif; // ENANO_JSRES_SETUP_ONLY |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
83 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
84 |
// CONFIG |
1 | 85 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
86 |
// Files safe to run full (aggressive) compression on |
421 | 87 |
$full_compress_safe = array( |
88 |
// Sorted by file size, descending (du -b *.js | sort -n) |
|
588
20484deb89cd
Upgraded TinyMCE to 3.1.0.1. Ported a couple special pages to the componentized JS system.
Dan
parents:
587
diff
changeset
|
89 |
'crypto.js', |
421 | 90 |
'ajax.js', |
91 |
'editor.js', |
|
582
a38876c0793c
Majorly reworked Javascript runtime stuff to use on-demand loading.
Dan
parents:
581
diff
changeset
|
92 |
'functions.js', |
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
93 |
'login.js', |
421 | 94 |
'acl.js', |
95 |
'misc.js', |
|
96 |
'comments.js', |
|
97 |
'autofill.js', |
|
98 |
'dropdown.js', |
|
99 |
'paginate.js', |
|
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
100 |
'enano-lib-basic.js', |
437
b66f029ae12d
Enabled strong compression on pwstrength.js as it causes problems otherwise in Opera
Dan
parents:
436
diff
changeset
|
101 |
'pwstrength.js', |
421 | 102 |
'flyin.js', |
559 | 103 |
'rank-manager.js', |
672
08a7875258b4
Added tab-based interface to userpage UI. Yes, it is plugin expansible, and yes, it breaks existing plugins that add code to the userpage (but that can be fixed with a "colspan=4")
Dan
parents:
650
diff
changeset
|
104 |
'userpage.js', |
421 | 105 |
'template-compiler.js', |
436
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
430
diff
changeset
|
106 |
'toolbar.js', |
421 | 107 |
); |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
108 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
109 |
// Files that should NOT be compressed due to already being compressed, licensing, or invalid produced code |
699
c7d737202d59
Removed Adobe Spry and replaced with jQuery. Please report any new bugs on the forums or via IRC. In a related note, auto-completion should work now at least for usernames. Still hacking away at page name completion...
Dan
parents:
685
diff
changeset
|
110 |
$compress_unsafe = array('json.js', 'fat.js', 'admin-menu.js', 'autofill.js', 'jquery.js', 'jquery-ui.js'); |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
111 |
|
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
112 |
require_once('includes/js-compressor.php'); |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
113 |
|
542
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
114 |
// try to gzip the output |
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
115 |
if ( !defined('ENANO_JSRES_SETUP_ONLY') ): |
542
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
116 |
$do_gzip = false; |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
117 |
if ( isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
118 |
{ |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
119 |
$acceptenc = str_replace(' ', '', strtolower($_SERVER['HTTP_ACCEPT_ENCODING'])); |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
120 |
$acceptenc = explode(',', $acceptenc); |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
121 |
if ( in_array('gzip', $acceptenc) ) |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
122 |
{ |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
123 |
$do_gzip = true; |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
124 |
ob_start(); |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
125 |
} |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
126 |
} |
5841df0ab575
Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents:
536
diff
changeset
|
127 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
128 |
// Output format will always be JS |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
129 |
header('Content-type: text/javascript'); |
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
130 |
|
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
131 |
endif; // ENANO_JSRES_SETUP_ONLY |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
132 |
|
587 | 133 |
$everything = "/* The code represented in this file is compressed for optimization purposes. The full source code is available in includes/clientside/static/. */\n\nvar ENANO_JSRES_COMPRESSED = true;\n\n"; |
1 | 134 |
|
568
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
135 |
// if we only want the tiny version of the API (just enough to get by until the full one is loaded), send that |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
136 |
// with a simple ETag and far future expires header |
594
738c61b498a6
A little more optimization work, client-side this time. I lied, no librijnadel2 here, but it's about to be merged in...
Dan
parents:
588
diff
changeset
|
137 |
|
738c61b498a6
A little more optimization work, client-side this time. I lied, no librijnadel2 here, but it's about to be merged in...
Dan
parents:
588
diff
changeset
|
138 |
// note - obfuscated for optimization purposes. The exact same code except properly indented is in enano-lib-basic. |
568
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
139 |
if ( isset($_GET['early']) ) |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
140 |
{ |
594
738c61b498a6
A little more optimization work, client-side this time. I lied, no librijnadel2 here, but it's about to be merged in...
Dan
parents:
588
diff
changeset
|
141 |
header('ETag: enanocms-lib-early-r2'); |
568
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
142 |
header('Expires: Wed, 1 Jan 2020 00:00:00 GMT'); |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
143 |
|
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
144 |
echo <<<JSEOF |
594
738c61b498a6
A little more optimization work, client-side this time. I lied, no librijnadel2 here, but it's about to be merged in...
Dan
parents:
588
diff
changeset
|
145 |
var onload_hooks = new Array();function addOnloadHook(func){if ( typeof ( func ) == 'function' ){if ( typeof(onload_hooks.push) == 'function' ){onload_hooks.push(func);}else{onload_hooks[onload_hooks.length] = func;};};} |
568
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
146 |
JSEOF; |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
147 |
|
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
148 |
exit(); |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
149 |
} |
3700f7124c2b
A bit of UX improvement to upgrade UI; updated readme for 1.1.4
Dan
parents:
559
diff
changeset
|
150 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
151 |
// Load and parse enano_lib_basic |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
152 |
$file = @file_get_contents('includes/clientside/static/enano-lib-basic.js'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
153 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
154 |
$pos_start_includes = strpos($file, '/*!START_INCLUDER*/'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
155 |
$pos_end_includes = strpos($file, '/*!END_INCLUDER*/'); |
1 | 156 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
157 |
if ( !$pos_start_includes || !$pos_end_includes ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
158 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
159 |
die('// Error: enano-lib-basic does not have required metacomments'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
160 |
} |
1 | 161 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
162 |
$pos_end_includes += strlen('/*!END_INCLUDER*/'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
163 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
164 |
preg_match('/var thefiles = (\[([^\]]+?)\]);/', $file, $match); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
165 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
166 |
if ( empty($match) ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
167 |
die('// Error: could not retrieve file list from enano-lib-basic'); |
1 | 168 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
169 |
// Decode file list |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
170 |
try |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
171 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
172 |
$file_list = enano_json_decode($match[1]); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
173 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
174 |
catch ( Exception $e ) |
1 | 175 |
{ |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
176 |
die("// Exception caught during file list parsing"); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
177 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
178 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
179 |
$apex = filemtime('includes/clientside/static/enano-lib-basic.js'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
180 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
181 |
$before_includes = substr($file, 0, $pos_start_includes); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
182 |
$after_includes = substr($file, $pos_end_includes); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
183 |
|
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
184 |
if ( isset($_GET['f']) ) |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
185 |
{ |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
186 |
// requested a single file |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
187 |
$js_file =& $_GET['f']; |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
188 |
if ( strstr($js_file, ',') ) |
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
189 |
{ |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
190 |
$filelist = explode(',', $js_file); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
191 |
unset($js_file); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
192 |
$everything = ''; |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
193 |
foreach ( $filelist as $js_file ) |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
194 |
{ |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
195 |
if ( !preg_match('/^[a-z0-9_-]+\.js$/i', $js_file) ) |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
196 |
{ |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
197 |
header('HTTP/1.1 404 Not Found'); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
198 |
exit('Not found'); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
199 |
} |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
200 |
|
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
201 |
$apex = filemtime("includes/clientside/static/$js_file"); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
202 |
|
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
203 |
$file_contents = file_get_contents("includes/clientside/static/$js_file"); |
780
f65e35566b63
A few fixes to the most recently added feature: more efficiency tweaks, tweaked l10n to have beetter fetch-on-demand support to ensure that stubs are never returned
Dan
parents:
779
diff
changeset
|
204 |
$everything .= jsres_cache_check($js_file, $file_contents) . ' loaded_components[\'' . $js_file . '\'] = true; if ( onload_complete ) { runOnloadHooks(); onload_hooks = []; };'; |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
205 |
} |
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
206 |
} |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
207 |
else |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
208 |
{ |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
209 |
if ( !preg_match('/^[a-z0-9_-]+\.js$/i', $js_file) ) |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
210 |
{ |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
211 |
header('HTTP/1.1 404 Not Found'); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
212 |
exit('Not found'); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
213 |
} |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
214 |
|
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
215 |
$apex = filemtime("includes/clientside/static/$js_file"); |
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
216 |
|
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
217 |
$file_contents = file_get_contents("includes/clientside/static/$js_file"); |
780
f65e35566b63
A few fixes to the most recently added feature: more efficiency tweaks, tweaked l10n to have beetter fetch-on-demand support to ensure that stubs are never returned
Dan
parents:
779
diff
changeset
|
218 |
$everything = jsres_cache_check($js_file, $file_contents) . ' loaded_components[\'' . $js_file . '\'] = true; if ( onload_complete ) { runOnloadHooks(); onload_hooks = []; };'; |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
219 |
} |
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
220 |
} |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
221 |
else |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
222 |
{ |
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
223 |
// compress enano-lib-basic |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
224 |
$libbasic = "$before_includes\n$after_includes"; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
225 |
$libbasic = jsres_cache_check('enano-lib-basic.js', $libbasic); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
226 |
$everything .= $libbasic; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
227 |
|
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
228 |
// $everything .= $before_includes; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
229 |
// $everything .= $after_includes; |
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
230 |
|
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
231 |
foreach ( $file_list as $js_file ) |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
232 |
{ |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
233 |
$file_contents = file_get_contents("includes/clientside/static/$js_file"); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
234 |
$time = filemtime("includes/clientside/static/$js_file"); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
235 |
if ( $time > $apex ) |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
236 |
$apex = $time; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
237 |
|
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
238 |
$file_contents = jsres_cache_check($js_file, $file_contents); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
239 |
|
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
240 |
$everything .= "\n\n// $js_file\n"; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
241 |
$everything .= "\n" . $file_contents; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
242 |
} |
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
243 |
} |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
244 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
245 |
// generate ETag |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
246 |
$etag = base64_encode(hexdecode(sha1($everything))); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
247 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
248 |
if ( isset($_SERVER['HTTP_IF_NONE_MATCH']) ) |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
249 |
{ |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
250 |
if ( "\"$etag\"" == $_SERVER['HTTP_IF_NONE_MATCH'] ) |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
251 |
{ |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
252 |
header('HTTP/1.1 304 Not Modified'); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
253 |
exit(); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
254 |
} |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
255 |
} |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
256 |
|
559 | 257 |
// generate expires header |
798
ddfc1b554a08
Redid error handler (it was causing some problems with gzip enabled)
Dan
parents:
780
diff
changeset
|
258 |
$expires = date('r', mktime(0, 0, 0, intval(date('m')), intval(date('d')), intval(date('y'))+1)); |
559 | 259 |
|
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
260 |
$everything = str_replace('/* JavaScriptCompressor 0.8 [www.devpro.it], thanks to Dean Edwards for idea [dean.edwards.name] */' . "\r\n", '', $everything); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
261 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
262 |
$date = date('r', $apex); |
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
263 |
|
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
264 |
if ( defined('ENANO_JSRES_SETUP_ONLY') ) |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
265 |
{ |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
266 |
return; // we're done setting up, break out |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
267 |
} |
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
613
diff
changeset
|
268 |
|
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
269 |
header("Date: $date"); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
270 |
header("Last-Modified: $date"); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
271 |
header("ETag: \"$etag\""); |
559 | 272 |
header("Expires: $expires"); |
800
9cdfe82c56cd
Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents:
798
diff
changeset
|
273 |
if ( !$do_gzip ) |
9cdfe82c56cd
Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents:
798
diff
changeset
|
274 |
header("Content-Length: " . strlen($everything)); |
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
275 |
|
586
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
276 |
$local_end = microtime_float(); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
277 |
$local_gentime = $local_end - $local_start; |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
278 |
$local_gentime = round($local_gentime, 5); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
279 |
header("X-Performance: generated in $local_gentime seconds"); |
234ddd896555
Made encryption work in form-based logon again; modified load_component() to fetch compressed versions when possible
Dan
parents:
582
diff
changeset
|
280 |
|
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
281 |
echo $everything; |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
282 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
283 |
if ( $do_gzip ) |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
284 |
{ |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
285 |
gzip_output(); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
286 |
} |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
287 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
288 |
/** |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
289 |
* Check the cache for the given JS file and return the best-compressed version. |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
290 |
* @param string Javascript file (acl.js) |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
291 |
* @param string Default/current contents |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
292 |
* @return string |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
293 |
*/ |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
294 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
295 |
function jsres_cache_check($js_file, $file_contents) |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
296 |
{ |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
297 |
global $full_compress_safe, $compress_unsafe; |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
298 |
|
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
299 |
$file_md5 = md5($file_contents); |
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
300 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
301 |
// Is this file cached? |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
302 |
$cache_path = ENANO_ROOT . "/cache/jsres_$js_file.json"; |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
303 |
$loaded_cache = false; |
1 | 304 |
|
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
305 |
if ( file_exists($cache_path) ) |
1 | 306 |
{ |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
307 |
// Load the cache file and parse it. |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
308 |
$cache_file = file_get_contents($cache_path); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
309 |
try |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
310 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
311 |
$cache_file = enano_json_decode($cache_file); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
312 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
313 |
catch ( Exception $e ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
314 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
315 |
// Don't do anything - let our fallbacks come into place |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
316 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
317 |
if ( is_array($cache_file) && isset($cache_file['md5']) && isset($cache_file['src']) ) |
1 | 318 |
{ |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
319 |
if ( $cache_file['md5'] === $file_md5 ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
320 |
{ |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
321 |
@header("X-Cache-Status: cache HIT, hash $file_md5"); |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
322 |
$loaded_cache = true; |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
323 |
$file_contents = $cache_file['src']; |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
324 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
325 |
} |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
326 |
} |
613 | 327 |
if ( !$loaded_cache && getConfig('cache_thumbs') == '1' ) |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
328 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
329 |
// Try to open the cache file and write to it. If we can't do that, just don't compress the code. |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
330 |
$handle = @fopen($cache_path, 'w'); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
331 |
if ( $handle ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
332 |
{ |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
333 |
$aggressive = in_array($js_file, $full_compress_safe); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
334 |
if ( !in_array($js_file, $compress_unsafe) ) |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
335 |
$file_contents = perform_js_compress($file_contents, $aggressive); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
336 |
|
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
337 |
$payload = enano_json_encode(array( |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
338 |
'md5' => $file_md5, |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
339 |
'src' => $file_contents |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
340 |
)); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
341 |
fwrite($handle, $payload); |
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
342 |
fclose($handle); |
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
343 |
@header("X-Cache-Status: cache MISS, new generated"); |
1 | 344 |
} |
746 | 345 |
else |
346 |
{ |
|
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
347 |
@header("X-Cache-Status: cache MISS, not generated"); |
746 | 348 |
} |
349 |
} |
|
350 |
else if ( !$loaded_cache ) |
|
351 |
{ |
|
779
609e35845ec3
load_component() now accepts an array, and most JS components are loaded all in one request now. Totally modular baby. And failsafe too.
Dan
parents:
746
diff
changeset
|
352 |
@header("X-Cache-Status: cache MISS, not generated"); |
1 | 353 |
} |
354 |
||
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
parents:
542
diff
changeset
|
355 |
return $file_contents; |
1 | 356 |
} |
420
301f546688d1
Re-enabled, debugged, and optimized Javascript compression code
Dan
parents:
411
diff
changeset
|
357 |