[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [6471] Added combine-script for js-files
From: |
Espen Liland |
Subject: |
[Fmsystem-commits] [6471] Added combine-script for js-files |
Date: |
Mon, 11 Oct 2010 16:37:56 +0000 |
Revision: 6471
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=6471
Author: espenl
Date: 2010-10-11 16:37:55 +0000 (Mon, 11 Oct 2010)
Log Message:
-----------
Added combine-script for js-files
Modified Paths:
--------------
trunk/phpgwapi/inc/class.js.inc.php
Added Paths:
-----------
trunk/phpgwapi/inc/combine.php
Modified: trunk/phpgwapi/inc/class.js.inc.php
===================================================================
--- trunk/phpgwapi/inc/class.js.inc.php 2010-10-11 11:55:03 UTC (rev 6470)
+++ trunk/phpgwapi/inc/class.js.inc.php 2010-10-11 16:37:55 UTC (rev 6471)
@@ -118,30 +118,34 @@
*/
public function get_script_links()
{
- $links = '';
- if( is_array($this->files) && count($this->files) )
+ $links = "<!--JS Imports from phpGW javascript class
-->\n";
+ $jsfiles = array();
+ if (is_array($this->files) && count($this->files))
{
- $links = "<!--JS Imports from phpGW javascript
class -->\n";
- foreach($this->files as $app => $packages)
+ foreach ($this->files as $app => $packages)
{
- if( is_array($packages) &&
count($packages) )
+ if (is_array($packages) &&
count($packages))
{
- foreach($packages as $pkg =>
$files)
+ foreach ($packages as $pkg =>
$files)
{
- if( is_array($files) &&
count($files) )
+ if (is_array($files) &&
count($files))
{
- foreach($files
as $file => $ignored)
+ foreach ($files
as $file => $ignored)
{
- //echo
"file:
{$GLOBALS['phpgw_info']['server']['webserver_url']}/{$app}/js/{$pkg}/{$file}.js
<br>";
- $links
.= '<script type="text/javascript" '
- .
"src=\"{$GLOBALS['phpgw_info']['server']['webserver_url']}/{$app}/js/{$pkg}/{$file}.js\">"
- .
"</script>\n";
+ // Add
file path to array and replace path separator with "--" for URL-friendlyness
+
$jsfiles[] = str_replace('/', '--', "{$app}/js/{$pkg}/{$file}.js");
}
}
}
}
}
}
+ $jsfiles = implode(',', $jsfiles);
+ $links .= '<script type="text/javascript" '
+ .
"src=\"{$GLOBALS['phpgw_info']['server']['webserver_url']}/phpgwapi/inc/combine.php?type=javascript&files={$jsfiles}\">"
+ . "</script>\n";
+ unset($jsfiles);
+
return $links;
}
Added: trunk/phpgwapi/inc/combine.php
===================================================================
--- trunk/phpgwapi/inc/combine.php (rev 0)
+++ trunk/phpgwapi/inc/combine.php 2010-10-11 16:37:55 UTC (rev 6471)
@@ -0,0 +1,167 @@
+<?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;
+ $cachedir = dirname(__FILE__) . '/../cache';
+ $cssdir = dirname(__FILE__) . '/../../';
+ $jsdir = dirname(__FILE__) . '/../../';
+
+// 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']);
+
+// Determine last modification date of the files
+ $lastmodified = 0;
+ while (list(, $element) = each($elements))
+ {
+ $path = realpath($base . '/' . str_replace('--', '/',
$element));
+
+ 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($base)) != $base ||
!file_exists($path))
+ {
+ header("HTTP/1.0 404 Not Found");
+ exit;
+ }
+
+ $lastmodified = max($lastmodified, filemtime($path));
+ }
+
+// Send Etag hash
+ $hash = $lastmodified . '-' . md5($_GET['files']);
+ 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))
+ {
+ 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 . '/' . str_replace('--', '/',
$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);
+ }
+ }
+ }
\ No newline at end of file
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [6471] Added combine-script for js-files,
Espen Liland <=