From: miker Date: Sat, 11 Sep 2010 14:51:18 +0000 (+0000) Subject: Backporting 17856, 17587, 17593, 17601 and 17603 from trunk: mod_deflate support... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d0e3a5adb11cd0167c0e89539c39facdbb34dae9;p=evergreen%2Fjoelewis.git Backporting 17856, 17587, 17593, 17601 and 17603 from trunk: mod_deflate support; improved and expanded dojo layers; support for limiting facet retrieval in IE to just the initially displayed set (IE is terrible with large data sets) git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@17604 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/examples/apache/eg_vhost.conf b/Open-ILS/examples/apache/eg_vhost.conf index da999b3182..116fd82d4a 100644 --- a/Open-ILS/examples/apache/eg_vhost.conf +++ b/Open-ILS/examples/apache/eg_vhost.conf @@ -128,6 +128,65 @@ RewriteRule - - [E=locale:%1] [L] + + # ---------------------------------------------------------------------------------- + # Some mod_deflate fun + # ---------------------------------------------------------------------------------- + + 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 + + + Header append Vary User-Agent env=!dont-vary + + + + + + + # ---------------------------------------------------------------------------------- + # Some mod_deflate fun + # ---------------------------------------------------------------------------------- + + 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 + + + Header append Vary User-Agent env=!dont-vary + + + + + + + # ---------------------------------------------------------------------------------- + # Some mod_deflate fun + # ---------------------------------------------------------------------------------- + + 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 + + + Header append Vary User-Agent env=!dont-vary + + + + # ---------------------------------------------------------------------------------- # Force SSL on the OPAC's "My Account" page @@ -472,4 +531,15 @@ RewriteRule ^/openurl$ ${openurl:%1} [NE,PT] SetHandler None +# ---------------------------------------------------------------------------------- +# Some mod_deflate logging setup +# ---------------------------------------------------------------------------------- + + 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 + diff --git a/Open-ILS/examples/openils.profile.js b/Open-ILS/examples/openils.profile.js index 5328179819..a01d97bd97 100644 --- a/Open-ILS/examples/openils.profile.js +++ b/Open-ILS/examples/openils.profile.js @@ -1,50 +1,223 @@ -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" ] + ] }; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm index 3d33837e3c..181514b33d 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm @@ -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( diff --git a/Open-ILS/web/js/dojo/openils/widget/FacetSidebar.js b/Open-ILS/web/js/dojo/openils/widget/FacetSidebar.js index 19d69f05fa..dab6bb9217 100644 --- a/Open-ILS/web/js/dojo/openils/widget/FacetSidebar.js +++ b/Open-ILS/web/js/dojo/openils/widget/FacetSidebar.js @@ -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 = [];