Backporting 17856, 17587, 17593, 17601 and 17603 from trunk: mod_deflate support...
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 11 Sep 2010 14:51:18 +0000 (14:51 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 11 Sep 2010 14:51:18 +0000 (14:51 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@17604 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/examples/apache/eg_vhost.conf
Open-ILS/examples/openils.profile.js
Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm
Open-ILS/web/js/dojo/openils/widget/FacetSidebar.js

index da999b3..116fd82 100644 (file)
@@ -128,6 +128,65 @@ RewriteRule - - [E=locale:%1] [L]
 
 </LocationMatch>
 
+<Location /opac/>
+    # ----------------------------------------------------------------------------------
+    # Some mod_deflate fun
+    # ----------------------------------------------------------------------------------
+    <IfModule mod_deflate.c>
+        SetOutputFilter DEFLATE
+
+        BrowserMatch ^Mozilla/4 gzip-only-text/html
+        BrowserMatch ^Mozilla/4\.0[678] no-gzip
+        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
+
+        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
+
+        <IfModule mod_headers.c>
+            Header append Vary User-Agent env=!dont-vary
+        </IfModule>
+    </IfModule>
+
+</Location>
+
+<Location //opac/>
+    # ----------------------------------------------------------------------------------
+    # Some mod_deflate fun
+    # ----------------------------------------------------------------------------------
+    <IfModule mod_deflate.c>
+        SetOutputFilter DEFLATE
+
+        BrowserMatch ^Mozilla/4 gzip-only-text/html
+        BrowserMatch ^Mozilla/4\.0[678] no-gzip
+        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
+
+        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
+
+        <IfModule mod_headers.c>
+            Header append Vary User-Agent env=!dont-vary
+        </IfModule>
+    </IfModule>
+
+</Location>
+
+<Location /js/>
+    # ----------------------------------------------------------------------------------
+    # Some mod_deflate fun
+    # ----------------------------------------------------------------------------------
+    <IfModule mod_deflate.c>
+        SetOutputFilter DEFLATE
+
+        BrowserMatch ^Mozilla/4 gzip-only-text/html
+        BrowserMatch ^Mozilla/4\.0[678] no-gzip
+        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
+
+        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
+
+        <IfModule mod_headers.c>
+            Header append Vary User-Agent env=!dont-vary
+        </IfModule>
+    </IfModule>
+
+</Location>
 
 # ----------------------------------------------------------------------------------
 # Force SSL on the OPAC's "My Account" page
@@ -472,4 +531,15 @@ RewriteRule ^/openurl$ ${openurl:%1} [NE,PT]
     SetHandler None
 </LocationMatch>
 
+# ----------------------------------------------------------------------------------
+# Some mod_deflate logging setup
+# ----------------------------------------------------------------------------------
+<IfModule mod_deflate.c>
+    DeflateFilterNote Input instream
+    DeflateFilterNote Output outstream
+    DeflateFilterNote Ratio ratio
+
+    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
+    CustomLog /var/log/apache2/deflate_log deflate
+</IfModule>
 
index 5328179..a01d97b 100644 (file)
-dependencies ={
-    layers: [
-{
-    name: "openils_dojo.js",
-    dependencies: [
-                   "dijit.form.CurrencyTextBox",
+dependencies = {
+    layers: [{
+        name: "openils_all_opac_dojo.js",
+        dependencies: [
+
+                   "dijit._Calendar",
                    "dijit.Menu",
+                   "dojo.io.script",
+                   "dijit.Dialog",
+                   "dijit.form.Button",
+                   "dijit.form.CheckBox",
+                   "dijit.form.CurrencyTextBox",
+                   "dijit.form.DateTextBox",
                    "dijit.form.FilteringSelect",
-                   "dojox.grid.compat._data.dijitEditors",
-                   "dojox.jsonPath",
-                   "dijit.ProgressBar",
-                   "dijit.Toolbar",
+                   "dijit.form._FormWidget",
+                   "dijit.form.NumberSpinner",
+                   "dijit.form.NumberTextBox",
                    "dijit.form.TextBox",
+                   "dijit.form.ValidationTextBox",
+                   "dijit.layout.ContentPane",
+                   "dijit.ProgressBar",
+                   "dijit._Templated",
+                   "dijit._Widget",
+                   "dojo.cookie",
+                   "dojo.data.ItemFileReadStore",
+                   "dojo.data.ItemFileWriteStore",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.query",
+                   "dojo.string",
+                   "dojox.grid.compat._data.dijitEditors",
+                   "dojox.grid.compat._data.editors",
+                   "dojox.grid.compat._data.model",
                    "dojox.grid.DataGrid",
-                   "dojox.fx",
-                   "dijit.layout.BorderContainer",
                    "dojox.grid.Grid",
-                   "dijit.form.ValidationTextBox",
+                   "dojox.jsonPath",
+                   "dojox.xml.parser"
+        ]
+    },{
+        name: "openils_ui_dojo.js",
+        dependencies: [
+                   "dijit.Dialog",
+                   "dijit.form.Button",
+                   "dijit.form.CheckBox",
                    "dijit.form.ComboBox",
-                   "dijit.layout.LayoutContainer",
-                   "dijit.Tree",
+                   "dijit.form.CurrencyTextBox",
+                   "dijit.form.DateTextBox",
+                   "dijit.form.DropDownButton",
+                   "dijit.form.FilteringSelect",
+                   "dijit.form.Form",
                    "dijit.form.NumberSpinner",
+                   "dijit.form.NumberTextBox",
+                   "dijit.form.RadioButton",
+                   "dijit.form.Textarea",
+                   "dijit.form.TextBox",
+                   "dijit.form.TimeTextBox",
+                   "dijit.layout.ContentPane",
+                   "dijit.layout.LayoutContainer",
+                   "dijit.layout.SplitContainer",
+                   "dijit.layout.StackContainer",
+                   "dijit.layout.TabContainer",
+                   "dijit.Menu",
+                   "dijit.MenuItem",
+                   "dijit.ProgressBar",
+                   "dijit.Toolbar",
                    "dijit.Tooltip",
+                   "dijit.TooltipDialog",
+                   "dojo.cookie",
+                   "dojo.data.ItemFileReadStore",
+                   "dojo.data.ItemFileWriteStore",
+                   "dojo.date",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.dnd.Container",
+                   "dojo.dnd.Source",
+                   "dojo.io.iframe",
+                   "dojo.parser",
+                   "dojo.string",
+                   "dojox.encoding.base64",
+                   "dojox.form.CheckedMultiSelect",
+                   "dojox.grid.cells.dijit",
+                   "dojox.grid.DataGrid",
+                   "dojox.grid.Grid",
+                   "dojox.string.sprintf",
                    "dojox.widget.PlaceholderMenuItem",
+                   "dojox.xml.parser"
+        ]
+    },{
+        name: "openils_full_dojo.js",
+        dependencies: [
+                   "dijit._Calendar",
+                   "dijit.Dialog",
+                   "dijit.form.Button",
+                   "dijit.form.CheckBox",
+                   "dijit.form.ComboBox",
+                   "dijit.form.CurrencyTextBox",
+                   "dijit.form.DateTextBox",
+                   "dijit.form.DropDownButton",
+                   "dijit.form.FilteringSelect",
                    "dijit.form.Form",
+                   "dijit.form._FormWidget",
+                   "dijit.form.NumberSpinner",
+                   "dijit.form.NumberTextBox",
+                   "dijit.form.RadioButton",
                    "dijit.form.Textarea",
+                   "dijit.form.TextBox",
+                   "dijit.form.TimeTextBox",
+                   "dijit.form.ValidationTextBox",
+                   "dijit.layout.BorderContainer",
+                   "dijit.layout.ContentPane",
+                   "dijit.layout.LayoutContainer",
+                   "dijit.layout.SplitContainer",
+                   "dijit.layout.StackContainer",
+                   "dijit.layout.TabContainer",
+                   "dijit.Menu",
+                   "dijit.MenuItem",
+                   "dijit.ProgressBar",
+                   "dijit._Templated",
+                   "dijit.Toolbar",
+                   "dijit.Tooltip",
+                   "dijit.TooltipDialog",
+                   "dijit.Tree",
+                   "dijit._Widget",
+                   "dojo.cookie",
                    "dojo.data.ItemFileReadStore",
                    "dojo.data.ItemFileWriteStore",
+                   "dojo.date",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.dnd.Container",
+                   "dojo.dnd.Source",
+                   "dojo.io.iframe",
+                   "dojo.io.script",
+                   "dojo.parser",
+                   "dojo.query",
+                   "dojo.string",
+                   "dojox.encoding.base64",
+                   "dojox.form.CheckedMultiSelect",
+                   "dojox.fx",
+                   "dojox.grid.cells.dijit",
+                   "dojox.grid.compat._data.dijitEditors",
+                   "dojox.grid.compat._data.editors",
+                   "dojox.grid.compat._data.model",
+                   "dojox.grid.DataGrid",
+                   "dojox.grid.Grid",
+                   "dojox.jsonPath",
+                   "dojox.string.sprintf",
+                   "dojox.widget.PlaceholderMenuItem",
+                   "dojox.widget.Toaster",
+                   "dojox.xml.parser"
+        ]
+    },{
+        name: "openils_opac_dojo.js",
+        dependencies: [
+                   "dijit._Calendar",
+                   "dijit.Dialog",
                    "dijit.form.Button",
                    "dijit.form.DateTextBox",
-                   "dijit.layout.ContentPane",
+                   "dijit.form.FilteringSelect",
+                   "dijit.form.TextBox",
+                   "dijit.Menu",
+                   "dojo.cookie",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.io.script",
+                   "dojo.parser"
+        ]
+    },{
+        name: "openils_dojo.js",
+        dependencies: [
+                   "dijit._Calendar",
                    "dijit.Dialog",
-                   "dojox.widget.Toaster",
-                   "dijit.form.NumberTextBox",
-                   "dijit.layout.SplitContainer",
-                   "dojox.form.CheckedMultiSelect",
-                   "dijit.form.TimeTextBox",
+                   "dijit.form.Button",
+                   "dijit.form.DateTextBox",
+                   "dijit.form.FilteringSelect",
+                   "dijit.form.TextBox",
+                   "dijit.Menu",
+                   "dojo.cookie",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.io.script",
+                   "dojo.parser"
+        ]
+    },{
+        name: "openils_dojo_dojo.js",
+        dependencies: [
+                   "dijit.Dialog",
+                   "dijit.form.Button",
                    "dijit.form.CheckBox",
-                   "dijit.layout.TabContainer",
-                   "dojo.io.script"
-                   ]
-}
-
-             ],
+                   "dijit.form.CurrencyTextBox",
+                   "dijit.form.DateTextBox",
+                   "dijit.form.FilteringSelect",
+                   "dijit.form._FormWidget",
+                   "dijit.form.NumberSpinner",
+                   "dijit.form.NumberTextBox",
+                   "dijit.form.TextBox",
+                   "dijit.form.ValidationTextBox",
+                   "dijit.layout.ContentPane",
+                   "dijit.ProgressBar",
+                   "dijit._Templated",
+                   "dijit._Widget",
+                   "dojo.cookie",
+                   "dojo.data.ItemFileReadStore",
+                   "dojo.data.ItemFileWriteStore",
+                   "dojo.date.locale",
+                   "dojo.date.stamp",
+                   "dojo.query",
+                   "dojo.string",
+                   "dojox.grid.compat._data.dijitEditors",
+                   "dojox.grid.compat._data.editors",
+                   "dojox.grid.compat._data.model",
+                   "dojox.grid.DataGrid",
+                   "dojox.grid.Grid",
+                   "dojox.jsonPath",
+                   "dojox.xml.parser"
+        ]
+    }],
     prefixes: [
-               [ "dijit", "../dijit" ],
-               [ "dojox", "../dojox" ]
-               ]
+        [ "dijit", "../dijit" ],
+        [ "dojox", "../dojox" ]
+    ]
 };
                
index 3d33837..181514b 100644 (file)
@@ -1319,7 +1319,24 @@ sub retrieve_cached_facets {
 
     return undef unless ($key and $key =~ /_facets$/);
 
-    return $cache->get_cache($key) || {};
+    my $blob = $cache->get_cache($key) || {};
+
+    my $facets = {};
+    if ($limit) {
+       for my $f ( keys %$blob ) {
+            my @sorted = map{ { $$_[1] => $$_[0] } } sort {$$b[0] <=> $$a[0] || $$a[1] cmp $$b[1]} map { [$$blob{$f}{$_}, $_] } keys %{ $$blob{$f} };
+            @sorted = @sorted[0 .. $limit - 1] if (scalar(@sorted) > $limit);
+            for my $s ( @sorted ) {
+                my ($k) = keys(%$s);
+                my ($v) = values(%$s);
+                $$facets{$f}{$k} = $v;
+            }
+        }
+    } else {
+        $facets = $blob;
+    }
+
+    return $facets;
 }
 
 __PACKAGE__->register_method(
index 19d69f0..dab6bb9 100644 (file)
@@ -47,12 +47,28 @@ if(!dojo._hasResource["openils.widget.FacetSidebar"]) {
 
                 if (openils.widget.Searcher._cache.facetData) {
                     this.facetData = openils.widget.Searcher._cache.facetData;
+                    this._render_callback();
                 } else {
-                    var facetData = fieldmapper.standardRequest( [ 'open-ils.search', 'open-ils.search.facet_cache.retrieve'], this.facetCacheKey );
-                    if (!facetData) return;
-                    this.facetData = openils.widget.Searcher._cache.facetData = facetData;
+                    var limit = dojo.isIE ? this.facetLimit : null;
+                    var self = this;
+                    fieldmapper.standardRequest( 
+                        [ 'open-ils.search', 'open-ils.search.facet_cache.retrieve'], 
+                        { async : true,
+                          params : [this.facetCacheKey, limit],
+                          oncomplete : function(r) {
+                              var facetData = r.recv().content();
+                              if (!facetData) return;
+                              self.facetData = openils.widget.Searcher._cache.facetData = facetData;
+                              self._render_callback();
+                          }
+                        }
+                    );
                 }
 
+            },
+
+            _render_callback : function(facetData) {
+               var facetData = this.facetData;
                 var classes = openils.widget.Searcher._cache.arr.cmc;
                 if (this.classOrder && this.classOrder.length > 0) {
                     classes = [];