fmsystem-commits
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]