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 |