[webmin-devel] Building a Google Gears manifest file of Webmin static files

David Harrison <[email protected]> Mon, 16 Feb 2009 22:55:30 +1300
Newsgroups gmane.comp.web.webmin.devel
Message-ID <[email protected]>
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: [email protected]
# 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;


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
-
Forwarded by the Webmin development list at [email protected]
To remove yourself from this list, go to
http://lists.sourceforge.net/lists/listinfo/webadmin-devel