mirror of
https://github.com/Hopiu/jquery-mobile.git
synced 2026-03-17 14:30:28 +00:00
Edited the PHP combiner and .htaccess logic to accommodate this change, as well as allowing manifest files to use a "../" when referencing files, which will be handy when adding themes that don't include structural files yet. Modified all HTML files to point to /themes/default for their theme.
172 lines
No EOL
5.1 KiB
PHP
172 lines
No EOL
5.1 KiB
PHP
<?php
|
|
|
|
/************************************************************************
|
|
* CSS and Javascript Combinator 0.5
|
|
* Copyright 2006 by Niels Leenheer
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
* "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
* the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
|
|
$cache = true;
|
|
$pullfromcache = false;
|
|
$theme = $_GET['theme'];
|
|
$cachedir = dirname(__FILE__) . '/cache';
|
|
$cssdir = dirname(__FILE__) . '/themes/' . $theme;
|
|
$jsdir = dirname(__FILE__) . '/js';
|
|
|
|
// Determine the directory and type we should use
|
|
switch ($_GET['type']) {
|
|
case 'css':
|
|
$base = realpath($cssdir);
|
|
break;
|
|
case 'javascript':
|
|
$base = realpath($jsdir);
|
|
break;
|
|
default:
|
|
header ("HTTP/1.0 503 Not Implemented");
|
|
exit;
|
|
};
|
|
|
|
$type = $_GET['type'];
|
|
//$elements = explode(',', $_GET['files']);
|
|
|
|
include($base . '/manifest.php');
|
|
|
|
// Determine last modification date of the files
|
|
$lastmodified = 0;
|
|
while (list(,$element) = each($elements)) {
|
|
$thisbase = $base;
|
|
$thiselement = $element;
|
|
if( strpos($thiselement, "../") === 0 ){
|
|
$thiselement = str_replace("../","",$thiselement);
|
|
$thisbase = explode("/", $thisbase);
|
|
array_pop($thisbase);
|
|
$thisbase = implode("/", $thisbase);
|
|
}
|
|
$path = realpath($thisbase . '/' . $thiselement);
|
|
//echo $path;
|
|
|
|
if (($type == 'javascript' && substr($path, -3) != '.js') ||
|
|
($type == 'css' && substr($path, -4) != '.css')) {
|
|
header ("HTTP/1.0 403 Forbidden");
|
|
exit;
|
|
}
|
|
|
|
if (substr($path, 0, strlen($thisbase)) != $thisbase || !file_exists($path)) {
|
|
header ("HTTP/1.0 404 Not Found");
|
|
exit;
|
|
}
|
|
|
|
$lastmodified = max($lastmodified, filemtime($path));
|
|
}
|
|
|
|
// Send Etag hash
|
|
$hash = $lastmodified . '-' . md5(implode('', $elements));
|
|
header ("Etag: \"" . $hash . "\"");
|
|
|
|
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
|
|
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) == '"' . $hash . '"')
|
|
{
|
|
// Return visit and no modifications, so do not send anything
|
|
header ("HTTP/1.0 304 Not Modified");
|
|
header ('Content-Length: 0');
|
|
}
|
|
else
|
|
{
|
|
// First time visit or files were modified
|
|
if ($cache)
|
|
{
|
|
// Determine supported compression method
|
|
$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
|
|
$deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
|
|
|
|
// Determine used compression method
|
|
$encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none');
|
|
|
|
// Check for buggy versions of Internet Explorer
|
|
if (!strstr($_SERVER['HTTP_USER_AGENT'], 'Opera') &&
|
|
preg_match('/^Mozilla\/4\.0 \(compatible; MSIE ([0-9]\.[0-9])/i', $_SERVER['HTTP_USER_AGENT'], $matches)) {
|
|
$version = floatval($matches[1]);
|
|
|
|
if ($version < 6)
|
|
$encoding = 'none';
|
|
|
|
if ($version == 6 && !strstr($_SERVER['HTTP_USER_AGENT'], 'EV1'))
|
|
$encoding = 'none';
|
|
}
|
|
|
|
// Try the cache first to see if the combined files were already generated
|
|
$cachefile = 'cache-' . $hash . '.' . $type . ($encoding != 'none' ? '.' . $encoding : '');
|
|
|
|
|
|
if (file_exists($cachedir . '/' . $cachefile) && $pullfromcache == true) {
|
|
if ($fp = fopen($cachedir . '/' . $cachefile, 'rb')) {
|
|
|
|
if ($encoding != 'none') {
|
|
header ("Content-Encoding: " . $encoding);
|
|
}
|
|
|
|
header ("Content-Type: text/" . $type);
|
|
header ("Content-Length: " . filesize($cachedir . '/' . $cachefile));
|
|
|
|
fpassthru($fp);
|
|
fclose($fp);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// Get contents of the files
|
|
$contents = '';
|
|
reset($elements);
|
|
while (list(,$element) = each($elements)) {
|
|
$path = realpath($base . '/' . $element);
|
|
$contents .= "\n\n" . file_get_contents($path);
|
|
}
|
|
|
|
// Send Content-Type
|
|
header ("Content-Type: text/" . $type);
|
|
|
|
if (isset($encoding) && $encoding != 'none')
|
|
{
|
|
// Send compressed contents
|
|
$contents = gzencode($contents, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);
|
|
header ("Content-Encoding: " . $encoding);
|
|
header ('Content-Length: ' . strlen($contents));
|
|
echo $contents;
|
|
}
|
|
else
|
|
{
|
|
// Send regular contents
|
|
header ('Content-Length: ' . strlen($contents));
|
|
echo $contents;
|
|
}
|
|
|
|
// Store cache
|
|
if ($cache) {
|
|
if ($fp = fopen($cachedir . '/' . $cachefile, 'wb')) {
|
|
fwrite($fp, $contents);
|
|
fclose($fp);
|
|
}
|
|
}
|
|
}
|
|
|