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; |