From: David H. <dav...@st...> - 2009-02-16 09:55:40
|
Hi, I have updated my Webmin theme with limited support for Google Gears: http://www.stress-free.co.nz/stressfree_webmin_theme_version_20_released It doesn't provide true offline support for Webmin, but it caches some static files so that users on a WAN can see significant performance improvements. At the moment the manifest file that lists what static files Gears should cache is hard coded. Gears throws a wobbly if a file listed in the manifest isn't available, this means hard coding file names for every possible file isn't possible (or viable considering the number). What I think would be cool is if this list could be dynamically built based on what modules are installed. e.g. All jpg, gif, png, js and css files for the Webmin install. Webmin would need to build this list very quickly (or cache it) as Gears checks the manifest file regularly to ensure things are up to date. The problem is I don't know enough Perl or the inner workings of Webmin to do this. If anyone out there could provide a code sample on how to build a list of static file names for a Webmin/Usermin install I would be very grateful. For reference I have included the existing manifest.cgi file that I use below. You can see that if I could call a function that returned the list of file names it would be trivial to iterate through all the relevant entries. David #!/usr/bin/perl ########################################################################### # # Email: dav...@st... # Internet: http://www.stress-free.co.nz # # Javascript version originally contributed by Dwi Kristianto # ########################################################################### do './web-lib.pl'; print "Content-type: text/javascript\n\n"; my $manifest = "{ \"betaManifestVersion\" : 1, \"version\" : \"wmg-20090216-2130\", \"entries\" : [ { \"url\" : \"$gconfig{'webprefix'}/images/favicon.ico\" }, { \"url\" : \"$gconfig{'webprefix'}/webmin/index.cgi\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme.css\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/print.css\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/csshover.htc\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme_ie.css\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme_ie7.css\" }, { \"url\" : \"$gconfig{'webprefix'}/images/1x1.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/audio.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/back.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/bar-blue.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/bar-grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/bar-purple.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/bar-red.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/bar-white.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/binary.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/closed.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/critical.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/dir.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/down.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/first-grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/first.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/gap.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/image.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/last-grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/last.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/lc1.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/lc2.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/left-grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/left.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/major.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/minor.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/movedown.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/movegap.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/moveup.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/newlogo.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/nosort.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/ok.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/open.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/rc1.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/rc2.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/right-grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/right.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/smalllogo.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/sort.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/sortasc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/sortascgrey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/sortdesc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/sortdescgrey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/text.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/unknown.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/up.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/usermin.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/images/webmin-blue.png\" }, { \"url\" : \"$gconfig{'webprefix'}/images/webmin.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/def.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/defines.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/dir.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/doc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/edit.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/icon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/mods.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/recon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/show.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/smallicon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_0.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_1.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_10.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_11.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_12.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_13.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_14.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_15.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_16.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_17.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_18.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_19.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_2.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_20.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_3.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_4.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_5.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_6.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_7.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_8.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_9.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/virt.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/apache/images/virt_index.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/A.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/AAAA.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/ALL.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/CNAME.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/HINFO.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/KEY.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/LOC.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/MX.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/NS.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/PTR.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/RP.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/SPF.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/SRV.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/TXT.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/WKS.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/acls.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/close.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/controls.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/delegation.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/extra.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/files.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/findfree.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/font.txt\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/forward.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/forwarding.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/gen.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/hint.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/icon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/keys.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/logging.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/manual.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/master.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/misc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/net.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/no-home.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/open.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/options.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/rndc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/servers.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/slave.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/slaves.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/smallicon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/soa.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/stub.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/text.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/view.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/whois.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/bind8/images/zonedef.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/db.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/dirs.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/errors.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/icon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/limits.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/misc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/safe.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/session.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/smallicon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/phpini/images/vars.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/cnf.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/cprivs.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/db.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/dbs.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/delete.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/edit.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/hosts.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/icon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/index.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/mysql.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/procs.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/root.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/smallicon.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/table.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/tprivs.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/users.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/vars.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/mysql/images/view.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ background.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ bar_blue.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ bar_grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ bar_purple.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/bar_red.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ bar_white.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/button.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ button_hover.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ closebutton.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/closed.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/favicon.ico \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/first- grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/first.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ footerbackground.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ form_background.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- bg.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- bgnotselected.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- bgselected.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- disabled.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- enabled.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ headerbackground.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/hidden- background.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/last- grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/last.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/lc2.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/left- grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/left.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ loginbackground.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ menu_background.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ menuhover.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/open.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/rc2.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/right- grey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/right.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ searchnotselected.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ searchresults.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ searchselected.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ sidebar_background.jpg\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/sortasc.gif \" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ sortascgrey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ sortdesc.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ sortdescgrey.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ userminlogo.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ webminlogo.gif\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ application.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ builder.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ controls.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ dragdrop.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ effects.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ prototype.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ scriptaculous.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ slider.js\" }, { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ unittest.js\" } ]}"; print $manifest; |
From: Jamie C. <jca...@we...> - 2009-02-16 18:56:31
|
On 16/Feb/2009 01:55 David Harrison wrote .. > Hi, > I have updated my Webmin theme with limited support for Google Gears: > http://www.stress-free.co.nz/stressfree_webmin_theme_version_20_released > > It doesn't provide true offline support for Webmin, but it caches some > static files so that users on a WAN can see significant performance > improvements. > > At the moment the manifest file that lists what static files Gears > should cache is hard coded. > Gears throws a wobbly if a file listed in the manifest isn't > available, this means hard coding file names for every possible file > isn't possible (or viable considering the number). > > What I think would be cool is if this list could be dynamically built > based on what modules are installed. > e.g. All jpg, gif, png, js and css files for the Webmin install. > > Webmin would need to build this list very quickly (or cache it) as > Gears checks the manifest file regularly to ensure things are up to > date. > > The problem is I don't know enough Perl or the inner workings of > Webmin to do this. > > If anyone out there could provide a code sample on how to build a list > of static file names for a Webmin/Usermin install I would be very > grateful. > > For reference I have included the existing manifest.cgi file that I > use below. > You can see that if I could call a function that returned the list of > file names it would be trivial to iterate through all the relevant > entries. > > > David > > > > #!/usr/bin/perl > ########################################################################### > # > # Email: dav...@st... > # Internet: http://www.stress-free.co.nz > # > # Javascript version originally contributed by Dwi Kristianto > # > ########################################################################### > > do './web-lib.pl'; > > print "Content-type: text/javascript\n\n"; > > my $manifest = "{ > \"betaManifestVersion\" : 1, > \"version\" : \"wmg-20090216-2130\", > \"entries\" : [ > { \"url\" : \"$gconfig{'webprefix'}/images/favicon.ico\" }, > { \"url\" : \"$gconfig{'webprefix'}/webmin/index.cgi\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme.css\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/print.css\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/csshover.htc\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme_ie.css\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/theme_ie7.css\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/1x1.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/audio.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/back.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/bar-blue.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/bar-grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/bar-purple.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/bar-red.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/bar-white.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/binary.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/closed.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/critical.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/dir.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/down.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/first-grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/first.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/gap.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/image.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/last-grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/last.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/lc1.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/lc2.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/left-grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/left.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/major.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/minor.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/movedown.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/movegap.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/moveup.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/newlogo.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/nosort.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/ok.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/open.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/rc1.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/rc2.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/right-grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/right.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/smalllogo.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/sort.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/sortasc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/sortascgrey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/sortdesc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/sortdescgrey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/text.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/unknown.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/up.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/usermin.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/webmin-blue.png\" }, > { \"url\" : \"$gconfig{'webprefix'}/images/webmin.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/def.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/defines.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/dir.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/doc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/edit.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/icon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/mods.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/recon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/show.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/smallicon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_0.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_1.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_10.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_11.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_12.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_13.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_14.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_15.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_16.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_17.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_18.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_19.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_2.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_20.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_3.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_4.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_5.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_6.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_7.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_8.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/type_icon_9.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/virt.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/apache/images/virt_index.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/A.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/AAAA.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/ALL.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/CNAME.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/HINFO.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/KEY.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/LOC.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/MX.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/NS.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/PTR.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/RP.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/SPF.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/SRV.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/TXT.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/WKS.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/acls.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/close.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/controls.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/delegation.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/extra.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/files.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/findfree.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/font.txt\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/forward.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/forwarding.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/gen.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/hint.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/icon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/keys.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/logging.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/manual.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/master.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/misc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/net.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/no-home.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/open.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/options.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/rndc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/servers.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/slave.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/slaves.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/smallicon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/soa.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/stub.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/text.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/view.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/whois.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/bind8/images/zonedef.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/db.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/dirs.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/errors.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/icon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/limits.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/misc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/safe.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/session.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/smallicon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/phpini/images/vars.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/cnf.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/cprivs.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/db.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/dbs.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/delete.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/edit.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/hosts.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/icon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/index.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/mysql.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/procs.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/root.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/smallicon.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/table.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/tprivs.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/users.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/vars.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/mysql/images/view.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > background.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > bar_blue.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > bar_grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > bar_purple.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/bar_red.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > bar_white.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/button.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > button_hover.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > closebutton.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/closed.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/favicon.ico > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/first- > grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/first.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > footerbackground.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > form_background.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- > bg.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- > bgnotselected.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- > bgselected.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- > disabled.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/gears- > enabled.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > headerbackground.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/hidden- > background.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/last- > grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/last.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/lc2.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/left- > grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/left.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > loginbackground.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > menu_background.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > menuhover.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/open.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/rc2.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/right- > grey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/right.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > searchnotselected.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > searchresults.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > searchselected.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > sidebar_background.jpg\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/sortasc.gif > \" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > sortascgrey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > sortdesc.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > sortdescgrey.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > userminlogo.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/images/ > webminlogo.gif\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > application.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > builder.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > controls.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > dragdrop.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > effects.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > prototype.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > scriptaculous.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > slider.js\" }, > { \"url\" : \"$gconfig{'webprefix'}/theme-stressfree/javascript/ > unittest.js\" } > ]}"; > > print $manifest; Hi David, Assuming you just want to cache all images and .js files, you could build a full list with code like : open(FIND, "find $root_directory -type f -name '*.{gif,png,jpg,js}' |"); while($file = <FIND>) { chop($file); $file =~ s/^\Q$root_directory\E//; $file = $gconfig{'webprefix'}.$file; $manifest .= "{ \"url\" : \"$file\" },"; } print $manifest; Does that help? By the way, great work on the theme! - Jamie |
From: David H. <dav...@st...> - 2009-02-17 09:37:16
|
On 17/02/2009, at 7:56 AM, Jamie Cameron wrote: > Assuming you just want to cache all images and .js files, you could > build a full list with code like : > > open(FIND, "find $root_directory -type f -name '*.{gif,png,jpg,js}' > |"); > while($file = <FIND>) { > chop($file); > $file =~ s/^\Q$root_directory\E//; > $file = $gconfig{'webprefix'}.$file; > $manifest .= "{ \"url\" : \"$file\" },"; > } > print $manifest; > > Does that help? Thanks Jamie, Based on the snippet you provided I've built a far more flexible manifest generation script. I chose to use File::Find rather than the command line 'find' tool as it seemed to keep me more platform neutral. Now rather than caching just a couple of hundred files all of a Webmin installs static content (excluding other themes) is cached. For my test Webmin installation this turned out to be 2,400-odd files. I've had to do a bit of a quick hack job on the init_config function in order to get around the referrer check. This is due to Gears operating as a separate process and not including any referrer details when making the manifest request. What I've done probably isn't that efficient, but for what's required it seems to do the trick :-) David theme-stressfree/manifest.cgi ---------------------------------------- #!/usr/bin/perl use File::Find; ########################################################################### # # Email: dav...@st... # Internet: http://www.stress-free.co.nz # # Javascript version originally contributed by Dwi Kristianto # ########################################################################### do './web-lib.pl'; init_manifest_config(); my @themes = &list_themes(); my $manifest; File::Find::find( {wanted => \&wanted}, $root_directory); if (length $manifest > 0) { chop $manifest; } my $manifestfile = $root_directory . "/theme-stressfree/manifest.cgi"; my $write_secs = (stat($manifestfile))[9]; print "Content-type: text/javascript\n\n"; print "{\n"; print "\"betaManifestVersion\" : 1,\n"; print "\"version\" : \"wmg-$write_secs\",\n"; print "\"entries\" : ["; print $manifest; print "\n]}"; sub wanted { if ((/\.jpg$/) || (/\.png$/) || (/\.gif$/) || (/\.js$/) || (/\.css $/) || (/\.htc$/) ){ my $file = $File::Find::name; $file =~ s/^\Q$root_directory\E//; foreach $theme (@themes) { if ($file =~ m/^\/$theme/) { return }; } $file = $gconfig{'webprefix'}.$file; $manifest .= "\n{ \"url\" : \"$file\" },"; } } sub list_themes { local @rv; opendir(DIR, $root_directory); foreach $m (readdir(DIR)) { local %tinfo; next if ($m =~ /^\./); next if ($m eq "theme-stressfree"); next if (!&read_file_cached("$root_directory/$m/theme.info", \ %tinfo)); push(@rv, $m); } closedir(DIR); return @rv; } sub init_manifest_config { # This is a direct copy of the Webmin init_config function without the referrer test. # Testing for a referrer fails with Gears as it makes a direct call without assigning a referrer URL. $config_file = "$config_directory/config"; %gconfig = ( ); &read_file_cached($config_file, \%gconfig); $null_file = $gconfig{'os_type'} eq 'windows' ? "NUL" : "/dev/null"; $path_separator = $gconfig{'os_type'} eq 'windows' ? ';' : ':'; # Set PATH and LD_LIBRARY_PATH if ($gconfig{'path'}) { if ($gconfig{'syspath'}) { # Webmin only $ENV{'PATH'} = $gconfig{'path'}; } else { # Include OS too $ENV{'PATH'} = $gconfig{'path'}.$path_separator. $ENV{'PATH'}; } } $ENV{$gconfig{'ld_env'}} = $gconfig{'ld_path'} if ($gconfig{'ld_env'}); # Set http_proxy and ftp_proxy environment variables, based on Webmin settings if ($gconfig{'http_proxy'}) { $ENV{'http_proxy'} = $gconfig{'http_proxy'}; } if ($gconfig{'ftp_proxy'}) { $ENV{'ftp_proxy'} = $gconfig{'ftp_proxy'}; } if ($gconfig{'noproxy'}) { $ENV{'no_proxy'} = $gconfig{'noproxy'}; } # Find all root directories local %miniserv; if (&get_miniserv_config(\%miniserv)) { @root_directories = ( $miniserv{'root'} ); for($i=0; defined($miniserv{"extraroot_$i"}); $i++) { push(@root_directories, $miniserv{"extraroot_$i"}); } } # Work out which module we are in, and read the per-module config file $0 =~ s/\\/\//g; # Force consistent path on Windows if (defined($ENV{'FOREIGN_MODULE_NAME'})) { # In a foreign call - use the module name given $root_directory = $ENV{'FOREIGN_ROOT_DIRECTORY'}; $module_name = $ENV{'FOREIGN_MODULE_NAME'}; @root_directories = ( $root_directory ) if (! @root_directories); } elsif ($ENV{'SCRIPT_NAME'}) { local $sn = $ENV{'SCRIPT_NAME'}; $sn =~ s/^$gconfig{'webprefix'}// if (!$gconfig{'webprefixnoredir'}); if ($sn =~ /^\/([^\/]+)\//) { # Get module name from CGI path $module_name = $1; } if ($ENV{'SERVER_ROOT'}) { $root_directory = $ENV{'SERVER_ROOT'}; } elsif ($ENV{'SCRIPT_FILENAME'}) { $root_directory = $ENV{'SCRIPT_FILENAME'}; $root_directory =~ s/$sn$//; } @root_directories = ( $root_directory ) if (! @root_directories); } else { # Get root directory from miniserv.conf, and deduce module name from $0 $root_directory = $root_directories[0]; local $r; local $rok = 0; foreach $r (@root_directories) { if ($0 =~ /^$r\/([^\/]+)\/[^\/]+$/i) { # Under a module directory $module_name = $1; $rok = 1; last; } elsif ($0 =~ /^$root_directory\/[^\/]+$/i) { # At the top level $rok = 1; last; } } &error("Script was not run with full path (failed to find $0 under $root_directory)") if (!$rok); } } |
From: Jamie C. <jca...@we...> - 2009-02-17 17:38:18
|
On 17/Feb/2009 01:37 David Harrison wrote .. > On 17/02/2009, at 7:56 AM, Jamie Cameron wrote: > > > Assuming you just want to cache all images and .js files, you could > > build a full list with code like : > > > > open(FIND, "find $root_directory -type f -name '*.{gif,png,jpg,js}' > > |"); > > while($file = <FIND>) { > > chop($file); > > $file =~ s/^\Q$root_directory\E//; > > $file = $gconfig{'webprefix'}.$file; > > $manifest .= "{ \"url\" : \"$file\" },"; > > } > > print $manifest; > > > > Does that help? > > > Thanks Jamie, > Based on the snippet you provided I've built a far more flexible > manifest generation script. > I chose to use File::Find rather than the command line 'find' tool as > it seemed to keep me more platform neutral. > > Now rather than caching just a couple of hundred files all of a Webmin > installs static content (excluding other themes) is cached. > For my test Webmin installation this turned out to be 2,400-odd files. Great! Shouldn't the browser be caching these static files after they are fetched once though? Or does gears pre-cache them all? > I've had to do a bit of a quick hack job on the init_config function > in order to get around the referrer check. > This is due to Gears operating as a separate process and not including > any referrer details when making the manifest request. There is a supported way of skipping refer checking in this case .. just set $trust_unknown_referers = 1; before calling init_config. - Jamie |
From: David H. <dav...@st...> - 2009-02-17 23:16:54
|
Thanks Jamie, I've added this flag and re-factored the code a good deal. The result is much cleaner and much faster to execute. On 18/02/2009, at 6:38 AM, Jamie Cameron wrote: > > Shouldn't the browser be caching these static files after they are > fetched > once though? Or does gears pre-cache them all? Gears pre-caches a good deal of the required files prior to them even being requested. The net result is if you've enabled Gears the browser won't even hit Webmin to see if the static files have been updated, it will just pull everything from the cache. On a WAN this improves the client experience significantly and from a server perspective it significantly reduces the number of inbound requests. David |