Author: ornicar2
Date: 2010-02-04 00:13:47 +0100 (Thu, 04 Feb 2010)
New Revision: 27520

Modified:
   plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml
   plugins/diemPlugin/trunk/dmCorePlugin/data/skeleton/config/dm/config.yml
   
plugins/diemPlugin/trunk/dmCorePlugin/lib/response/asset/compressor/dmJavascriptCompressor.php
   plugins/diemPlugin/trunk/dmCorePlugin/lib/response/dmWebResponse.php
   
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
Log:
[Diem]
- made possible to include javascript libraries in the <head> section. It 
degrades performances but  some symfony plugins write javascript code directly 
into HTML, and need jQuery to be loaded before. See the "head_inclusion" option 
in config/dm/config.yml

Modified: plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml  2010-02-03 
22:14:52 UTC (rev 27519)
+++ plugins/diemPlugin/trunk/dmCorePlugin/config/dm/config.yml  2010-02-03 
23:13:47 UTC (rev 27520)
@@ -9,8 +9,12 @@
   js:
     compress:             true          # (RECOMMENDED) Performance : Minifies 
javascripts and put them into a single compressed file
     cdn:                                # use cdn to load libraries
-      enabled:            false         # Will use cdn to load javascript 
libraries faster
+      enabled:            false         # Will use cdn to load javascript 
libraries
       lib.jquery:         
'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'
+    head_inclusion:       [ ]           # If you want some libraries to be 
included in the <head> section,
+                                        # declare them here. This degrades 
performances but is required
+                                        # by some symfony plugins that embed 
jQuery code.
+                                        # example: [ lib.jquery ]
     
   css:
     compress:             true          # (RECOMMENDED) Performance : Minifies 
stylesheets and put them into a single compressed file

Modified: 
plugins/diemPlugin/trunk/dmCorePlugin/data/skeleton/config/dm/config.yml
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/data/skeleton/config/dm/config.yml    
2010-02-03 22:14:52 UTC (rev 27519)
+++ plugins/diemPlugin/trunk/dmCorePlugin/data/skeleton/config/dm/config.yml    
2010-02-03 23:13:47 UTC (rev 27520)
@@ -10,6 +10,10 @@
     compress:             true          # (RECOMMENDED) Performance : Minifies 
javascripts and put them into a single compressed file
     cdn:
       enabled:            false         # (RECOMMENDED) uses google cdn to 
load jQuery
+    head_inclusion:       [ ]           # If you want some libraries to be 
included in the <head> section,
+                                        # declare them here. This degrades 
performances but is required
+                                        # by some symfony plugins that embed 
jQuery code.
+                                        # example: [ lib.jquery ]
       
   css:
     compress:             true          # (RECOMMENDED) Performance : Minifies 
stylesheets and put them into a single compressed file

Modified: 
plugins/diemPlugin/trunk/dmCorePlugin/lib/response/asset/compressor/dmJavascriptCompressor.php
===================================================================
--- 
plugins/diemPlugin/trunk/dmCorePlugin/lib/response/asset/compressor/dmJavascriptCompressor.php
      2010-02-03 22:14:52 UTC (rev 27519)
+++ 
plugins/diemPlugin/trunk/dmCorePlugin/lib/response/asset/compressor/dmJavascriptCompressor.php
      2010-02-03 23:13:47 UTC (rev 27520)
@@ -10,6 +10,20 @@
     ));
   }
 
+  public function preProcess()
+  {
+    parent::preProcess();
+
+    // remove head included javascripts from compression
+    foreach($this->assets as $webPath => $options)
+    {
+      if (isset($options['head_inclusion']))
+      {
+        unset($this->assets[$webPath]);
+      }
+    }
+  }
+
   public function addToBlackList($fileName)
   {
     $this->mergeOption('black_list', (array) $fileName);

Modified: plugins/diemPlugin/trunk/dmCorePlugin/lib/response/dmWebResponse.php
===================================================================
--- plugins/diemPlugin/trunk/dmCorePlugin/lib/response/dmWebResponse.php        
2010-02-03 22:14:52 UTC (rev 27519)
+++ plugins/diemPlugin/trunk/dmCorePlugin/lib/response/dmWebResponse.php        
2010-02-03 23:13:47 UTC (rev 27520)
@@ -182,6 +182,11 @@
     {
       return $this;
     }
+
+    if(in_array($asset, sfConfig::get('dm_js_head_inclusion')))
+    {
+      $options['head_inclusion'] = true;
+    }
     
     $this->validatePosition($position);
 
@@ -228,6 +233,27 @@
 
     return $this;
   }
+
+  public function getHeadJavascripts()
+  {
+    $headInclusion = sfConfig::get('dm_js_head_inclusion');
+    
+    if(empty($headInclusion))
+    {
+      return array();
+    }
+    
+    $javascripts = array();
+    foreach($this->getJavascripts() as $webPath => $options)
+    {
+      if (isset($options['head_inclusion']))
+      {
+        $javascripts[$webPath] = $options;
+      }
+    }
+
+    return $javascripts;
+  }
   
   /*
    * Means that request has been sent by a human, and the application will 
send html for a browser.

Modified: 
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
===================================================================
--- 
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
   2010-02-03 22:14:52 UTC (rev 27519)
+++ 
plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/layout/dmCoreLayoutHelper.php
   2010-02-03 23:13:47 UTC (rev 27520)
@@ -28,7 +28,8 @@
     $this->renderMetas().
     $this->renderStylesheets().
     $this->renderFavicon().
-    $this->renderIeHtml5Fix();
+    $this->renderIeHtml5Fix().
+    $this->renderHeadJavascripts();
   }
 
   public function renderBodyTag()
@@ -172,6 +173,29 @@
   
     return $html;
   }
+
+  /*
+   * JavaScript libs declared in dm_js_head_inclusion
+   * are declared in the <head> section
+   */
+  public function renderHeadJavascripts()
+  {
+    $javascripts = 
$this->serviceContainer->getService('response')->getHeadJavascripts();
+    if(empty($javascripts))
+    {
+      return '';
+    }
+
+    $relativeUrlRoot = 
dmArray::get($this->serviceContainer->getParameter('request.context'), 
'relative_url_root');
+    
+    $html = '';
+    foreach($javascripts as $file => $options)
+    {
+      $html .= '<script type="text/javascript" src="'.($file{0} === '/' ? 
$relativeUrlRoot.$file : $file).'"></script>';
+    }
+
+    return $html;
+  }
   
   public function renderJavascripts()
   {
@@ -181,7 +205,7 @@
      */
     $javascripts = $this->dispatcher->filter(
       new sfEvent($this, 'dm.layout.filter_javascripts'),
-      $this->getService('response')->getJavascripts()
+      $this->serviceContainer->getService('response')->getJavascripts()
     )->getReturnValue();
     
     sfConfig::set('symfony.asset.javascripts_included', true);

-- 
You received this message because you are subscribed to the Google Groups 
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/symfony-svn?hl=en.

Reply via email to