From 18c74950d1bd9fc915411bde06b99a273b55ae25 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 20 Jan 2017 14:08:21 -0600 Subject: [PATCH] More progress towards working websockets stuff. Add mime-types.scm to contrib. --- Makefile.am | 3 + data/web-static/js/mudsync.js | 23 ++ mudsync/contrib/mime-types.scm | 556 +++++++++++++++++++++++++++++++++ mudsync/networking.scm | 8 +- 4 files changed, 587 insertions(+), 3 deletions(-) create mode 100644 data/web-static/js/mudsync.js create mode 100644 mudsync/contrib/mime-types.scm diff --git a/Makefile.am b/Makefile.am index f9dfd9b..b732060 100644 --- a/Makefile.am +++ b/Makefile.am @@ -55,6 +55,7 @@ SOURCES = \ mudsync/run-game.scm \ mudsync/thing.scm \ mudsync/package-config.scm \ + mudsync/contrib/mime-types.scm \ mudsync.scm # TESTS = \ @@ -79,6 +80,8 @@ EXTRA_DIST = \ COPYING \ worlds/bricabrac.scm \ worlds/goblin-hq.scm \ + data/web-static/css/main.css \ + data/web-static/js/mudsync.js \ pre-inst-env.in diff --git a/data/web-static/js/mudsync.js b/data/web-static/js/mudsync.js new file mode 100644 index 0000000..f2edef9 --- /dev/null +++ b/data/web-static/js/mudsync.js @@ -0,0 +1,23 @@ +function displayMessage(data) { + console.log("received message"); + console.log(data); +} + +function installWebsocket() { + // TODO: Don't hardcode the websocket path; pull it from the DOM + var ws = new WebSocket("ws://127.0.0.1:8888"); + ws.onmessage = function(evt) { + displayMessage(evt.data); + }; + ws.onopen = function() { + console.log("connected"); + ws.send("Hello, there!"); + }; + ws.onclose = function () { + console.log("closed websocket"); + }; +} + +window.onload = function () { + installWebsocket(); +} diff --git a/mudsync/contrib/mime-types.scm b/mudsync/contrib/mime-types.scm new file mode 100644 index 0000000..17fe25d --- /dev/null +++ b/mudsync/contrib/mime-types.scm @@ -0,0 +1,556 @@ +;;; Haunt --- Static site generator for GNU Guile +;;; Copyright © 2015 David Thompson +;;; +;;; This file is part of Haunt. +;;; +;;; Haunt is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; Haunt is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with Haunt. If not, see . + +;;; Commentary: +;; +;; Simple MIME type guesser. +;; +;;; Code: + +(define-module (mudsync contrib mime-types) + #:use-module (ice-9 hash-table) + #:use-module (ice-9 regex) + #:export (mime-type)) + +(define %mime-types + (alist->hash-table + '(("ez" . application/andrew-inset) + ("anx" . application/annodex) + ("atom" . application/atom+xml) + ("atomcat" . application/atomcat+xml) + ("atomsrv" . application/atomserv+xml) + ("lin" . application/bbolin) + ("cap" . application/cap) + ("pcap" . application/cap) + ("cu" . application/cu-seeme) + ("davmount" . application/davmount+xml) + ("tsp" . application/dsptype) + ("es" . application/ecmascript) + ("spl" . application/futuresplash) + ("hta" . application/hta) + ("jar" . application/java-archive) + ("ser" . application/java-serialized-object) + ("class" . application/java-vm) + ("js" . application/javascript) + ("m3g" . application/m3g) + ("hqx" . application/mac-binhex40) + ("cpt" . application/mac-compactpro) + ("nb" . application/mathematica) + ("nbp" . application/mathematica) + ("mdb" . application/msaccess) + ("doc" . application/msword) + ("dot" . application/msword) + ("mxf" . application/mxf) + ("bin" . application/octet-stream) + ("oda" . application/oda) + ("ogx" . application/ogg) + ("pdf" . application/pdf) + ("key" . application/pgp-keys) + ("pgp" . application/pgp-signature) + ("prf" . application/pics-rules) + ("ps" . application/postscript) + ("ai" . application/postscript) + ("eps" . application/postscript) + ("epsi" . application/postscript) + ("epsf" . application/postscript) + ("eps2" . application/postscript) + ("eps3" . application/postscript) + ("rar" . application/rar) + ("rdf" . application/rdf+xml) + ("rss" . application/rss+xml) + ("rtf" . application/rtf) + ("smi" . application/smil) + ("smil" . application/smil) + ("xhtml" . application/xhtml+xml) + ("xht" . application/xhtml+xml) + ("xml" . application/xml) + ("xsl" . application/xml) + ("xsd" . application/xml) + ("xspf" . application/xspf+xml) + ("zip" . application/zip) + ("apk" . application/vnd.android.package-archive) + ("cdy" . application/vnd.cinderella) + ("kml" . application/vnd.google-earth.kml+xml) + ("kmz" . application/vnd.google-earth.kmz) + ("xul" . application/vnd.mozilla.xul+xml) + ("xls" . application/vnd.ms-excel) + ("xlb" . application/vnd.ms-excel) + ("xlt" . application/vnd.ms-excel) + ("cat" . application/vnd.ms-pki.seccat) + ("stl" . application/vnd.ms-pki.stl) + ("ppt" . application/vnd.ms-powerpoint) + ("pps" . application/vnd.ms-powerpoint) + ("odc" . application/vnd.oasis.opendocument.chart) + ("odb" . application/vnd.oasis.opendocument.database) + ("odf" . application/vnd.oasis.opendocument.formula) + ("odg" . application/vnd.oasis.opendocument.graphics) + ("otg" . application/vnd.oasis.opendocument.graphics-template) + ("odi" . application/vnd.oasis.opendocument.image) + ("odp" . application/vnd.oasis.opendocument.presentation) + ("otp" . application/vnd.oasis.opendocument.presentation-template) + ("ods" . application/vnd.oasis.opendocument.spreadsheet) + ("ots" . application/vnd.oasis.opendocument.spreadsheet-template) + ("odt" . application/vnd.oasis.opendocument.text) + ("odm" . application/vnd.oasis.opendocument.text-master) + ("ott" . application/vnd.oasis.opendocument.text-template) + ("oth" . application/vnd.oasis.opendocument.text-web) + ("xlsx" . application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) + ("xltx" . application/vnd.openxmlformats-officedocument.spreadsheetml.template) + ("pptx" . application/vnd.openxmlformats-officedocument.presentationml.presentation) + ("ppsx" . application/vnd.openxmlformats-officedocument.presentationml.slideshow) + ("potx" . application/vnd.openxmlformats-officedocument.presentationml.template) + ("docx" . application/vnd.openxmlformats-officedocument.wordprocessingml.document) + ("dotx" . application/vnd.openxmlformats-officedocument.wordprocessingml.template) + ("cod" . application/vnd.rim.cod) + ("mmf" . application/vnd.smaf) + ("sdc" . application/vnd.stardivision.calc) + ("sds" . application/vnd.stardivision.chart) + ("sda" . application/vnd.stardivision.draw) + ("sdd" . application/vnd.stardivision.impress) + ("sdf" . application/vnd.stardivision.math) + ("sdw" . application/vnd.stardivision.writer) + ("sgl" . application/vnd.stardivision.writer-global) + ("sxc" . application/vnd.sun.xml.calc) + ("stc" . application/vnd.sun.xml.calc.template) + ("sxd" . application/vnd.sun.xml.draw) + ("std" . application/vnd.sun.xml.draw.template) + ("sxi" . application/vnd.sun.xml.impress) + ("sti" . application/vnd.sun.xml.impress.template) + ("sxm" . application/vnd.sun.xml.math) + ("sxw" . application/vnd.sun.xml.writer) + ("sxg" . application/vnd.sun.xml.writer.global) + ("stw" . application/vnd.sun.xml.writer.template) + ("sis" . application/vnd.symbian.install) + ("vsd" . application/vnd.visio) + ("wbxml" . application/vnd.wap.wbxml) + ("wmlc" . application/vnd.wap.wmlc) + ("wmlsc" . application/vnd.wap.wmlscriptc) + ("wpd" . application/vnd.wordperfect) + ("wp5" . application/vnd.wordperfect5.1) + ("wk" . application/x-123) + ("7z" . application/x-7z-compressed) + ("bz2" . application/x-bzip2) + ("gz" . application/x-gzip) + ("abw" . application/x-abiword) + ("dmg" . application/x-apple-diskimage) + ("bcpio" . application/x-bcpio) + ("torrent" . application/x-bittorrent) + ("cab" . application/x-cab) + ("cbr" . application/x-cbr) + ("cbz" . application/x-cbz) + ("cdf" . application/x-cdf) + ("cda" . application/x-cdf) + ("vcd" . application/x-cdlink) + ("pgn" . application/x-chess-pgn) + ("cpio" . application/x-cpio) + ("csh" . application/x-csh) + ("deb" . application/x-debian-package) + ("udeb" . application/x-debian-package) + ("dcr" . application/x-director) + ("dir" . application/x-director) + ("dxr" . application/x-director) + ("dms" . application/x-dms) + ("wad" . application/x-doom) + ("dvi" . application/x-dvi) + ("rhtml" . application/x-httpd-eruby) + ("pfa" . application/x-font) + ("pfb" . application/x-font) + ("gsf" . application/x-font) + ("pcf" . application/x-font) + ("pcf.Z" . application/x-font) + ("mm" . application/x-freemind) + ("spl" . application/x-futuresplash) + ("gnumeric" . application/x-gnumeric) + ("sgf" . application/x-go-sgf) + ("gcf" . application/x-graphing-calculator) + ("gtar" . application/x-gtar) + ("tgz" . application/x-gtar) + ("taz" . application/x-gtar) + ("tar.gz" . application/x-gtar) + ("tar.bz2" . application/x-gtar) + ("tbz2" . application/x-gtar) + ("hdf" . application/x-hdf) + ("phtml" . application/x-httpd-php) + ("pht" . application/x-httpd-php) + ("php" . application/x-httpd-php) + ("phps" . application/x-httpd-php-source) + ("php3" . application/x-httpd-php3) + ("php3p" . application/x-httpd-php3-preprocessed) + ("php4" . application/x-httpd-php4) + ("php5" . application/x-httpd-php5) + ("ica" . application/x-ica) + ("info" . application/x-info) + ("ins" . application/x-internet-signup) + ("isp" . application/x-internet-signup) + ("iii" . application/x-iphone) + ("iso" . application/x-iso9660-image) + ("jam" . application/x-jam) + ("jnlp" . application/x-java-jnlp-file) + ("jmz" . application/x-jmol) + ("chrt" . application/x-kchart) + ("kil" . application/x-killustrator) + ("skp" . application/x-koan) + ("skd" . application/x-koan) + ("skt" . application/x-koan) + ("skm" . application/x-koan) + ("kpr" . application/x-kpresenter) + ("kpt" . application/x-kpresenter) + ("ksp" . application/x-kspread) + ("kwd" . application/x-kword) + ("kwt" . application/x-kword) + ("latex" . application/x-latex) + ("lha" . application/x-lha) + ("lyx" . application/x-lyx) + ("lzh" . application/x-lzh) + ("lzx" . application/x-lzx) + ("frm" . application/x-maker) + ("maker" . application/x-maker) + ("frame" . application/x-maker) + ("fm" . application/x-maker) + ("fb" . application/x-maker) + ("book" . application/x-maker) + ("fbdoc" . application/x-maker) + ("mif" . application/x-mif) + ("wmd" . application/x-ms-wmd) + ("wmz" . application/x-ms-wmz) + ("com" . application/x-msdos-program) + ("exe" . application/x-msdos-program) + ("bat" . application/x-msdos-program) + ("dll" . application/x-msdos-program) + ("msi" . application/x-msi) + ("nc" . application/x-netcdf) + ("pac" . application/x-ns-proxy-autoconfig) + ("dat" . application/x-ns-proxy-autoconfig) + ("nwc" . application/x-nwc) + ("o" . application/x-object) + ("oza" . application/x-oz-application) + ("p7r" . application/x-pkcs7-certreqresp) + ("crl" . application/x-pkcs7-crl) + ("pyc" . application/x-python-code) + ("pyo" . application/x-python-code) + ("qgs" . application/x-qgis) + ("shp" . application/x-qgis) + ("shx" . application/x-qgis) + ("qtl" . application/x-quicktimeplayer) + ("rpm" . application/x-redhat-package-manager) + ("rb" . application/x-ruby) + ("sh" . application/x-sh) + ("shar" . application/x-shar) + ("swf" . application/x-shockwave-flash) + ("swfl" . application/x-shockwave-flash) + ("scr" . application/x-silverlight) + ("sit" . application/x-stuffit) + ("sitx" . application/x-stuffit) + ("sv4cpio" . application/x-sv4cpio) + ("sv4crc" . application/x-sv4crc) + ("tar" . application/x-tar) + ("tcl" . application/x-tcl) + ("gf" . application/x-tex-gf) + ("pk" . application/x-tex-pk) + ("texinfo" . application/x-texinfo) + ("texi" . application/x-texinfo) + ("~" . application/x-trash) + ("%" . application/x-trash) + ("bak" . application/x-trash) + ("old" . application/x-trash) + ("sik" . application/x-trash) + ("t" . application/x-troff) + ("tr" . application/x-troff) + ("roff" . application/x-troff) + ("man" . application/x-troff-man) + ("me" . application/x-troff-me) + ("ms" . application/x-troff-ms) + ("ustar" . application/x-ustar) + ("src" . application/x-wais-source) + ("wz" . application/x-wingz) + ("crt" . application/x-x509-ca-cert) + ("xcf" . application/x-xcf) + ("fig" . application/x-xfig) + ("xpi" . application/x-xpinstall) + ("amr" . audio/amr) + ("awb" . audio/amr-wb) + ("amr" . audio/amr) + ("awb" . audio/amr-wb) + ("axa" . audio/annodex) + ("au" . audio/basic) + ("snd" . audio/basic) + ("flac" . audio/flac) + ("mid" . audio/midi) + ("midi" . audio/midi) + ("kar" . audio/midi) + ("mpga" . audio/mpeg) + ("mpega" . audio/mpeg) + ("mp2" . audio/mpeg) + ("mp3" . audio/mpeg) + ("m4a" . audio/mpeg) + ("m3u" . audio/mpegurl) + ("oga" . audio/ogg) + ("ogg" . audio/ogg) + ("spx" . audio/ogg) + ("sid" . audio/prs.sid) + ("aif" . audio/x-aiff) + ("aiff" . audio/x-aiff) + ("aifc" . audio/x-aiff) + ("gsm" . audio/x-gsm) + ("m3u" . audio/x-mpegurl) + ("wma" . audio/x-ms-wma) + ("wax" . audio/x-ms-wax) + ("ra" . audio/x-pn-realaudio) + ("rm" . audio/x-pn-realaudio) + ("ram" . audio/x-pn-realaudio) + ("ra" . audio/x-realaudio) + ("pls" . audio/x-scpls) + ("sd2" . audio/x-sd2) + ("wav" . audio/x-wav) + ("alc" . chemical/x-alchemy) + ("cac" . chemical/x-cache) + ("cache" . chemical/x-cache) + ("csf" . chemical/x-cache-csf) + ("cbin" . chemical/x-cactvs-binary) + ("cascii" . chemical/x-cactvs-binary) + ("ctab" . chemical/x-cactvs-binary) + ("cdx" . chemical/x-cdx) + ("cer" . chemical/x-cerius) + ("c3d" . chemical/x-chem3d) + ("chm" . chemical/x-chemdraw) + ("cif" . chemical/x-cif) + ("cmdf" . chemical/x-cmdf) + ("cml" . chemical/x-cml) + ("cpa" . chemical/x-compass) + ("bsd" . chemical/x-crossfire) + ("csml" . chemical/x-csml) + ("csm" . chemical/x-csml) + ("ctx" . chemical/x-ctx) + ("cxf" . chemical/x-cxf) + ("cef" . chemical/x-cxf) + ("emb" . chemical/x-embl-dl-nucleotide) + ("embl" . chemical/x-embl-dl-nucleotide) + ("spc" . chemical/x-galactic-spc) + ("inp" . chemical/x-gamess-input) + ("gam" . chemical/x-gamess-input) + ("gamin" . chemical/x-gamess-input) + ("fch" . chemical/x-gaussian-checkpoint) + ("fchk" . chemical/x-gaussian-checkpoint) + ("cub" . chemical/x-gaussian-cube) + ("gau" . chemical/x-gaussian-input) + ("gjc" . chemical/x-gaussian-input) + ("gjf" . chemical/x-gaussian-input) + ("gal" . chemical/x-gaussian-log) + ("gcg" . chemical/x-gcg8-sequence) + ("gen" . chemical/x-genbank) + ("hin" . chemical/x-hin) + ("istr" . chemical/x-isostar) + ("ist" . chemical/x-isostar) + ("jdx" . chemical/x-jcamp-dx) + ("dx" . chemical/x-jcamp-dx) + ("kin" . chemical/x-kinemage) + ("mcm" . chemical/x-macmolecule) + ("mmd" . chemical/x-macromodel-input) + ("mmod" . chemical/x-macromodel-input) + ("mol" . chemical/x-mdl-molfile) + ("rd" . chemical/x-mdl-rdfile) + ("rxn" . chemical/x-mdl-rxnfile) + ("sd" . chemical/x-mdl-sdfile) + ("sdf" . chemical/x-mdl-sdfile) + ("tgf" . chemical/x-mdl-tgf) + ("mcif" . chemical/x-mmcif) + ("mol2" . chemical/x-mol2) + ("b" . chemical/x-molconn-Z) + ("gpt" . chemical/x-mopac-graph) + ("mop" . chemical/x-mopac-input) + ("mopcrt" . chemical/x-mopac-input) + ("mpc" . chemical/x-mopac-input) + ("zmt" . chemical/x-mopac-input) + ("moo" . chemical/x-mopac-out) + ("mvb" . chemical/x-mopac-vib) + ("asn" . chemical/x-ncbi-asn1) + ("prt" . chemical/x-ncbi-asn1-ascii) + ("ent" . chemical/x-ncbi-asn1-ascii) + ("val" . chemical/x-ncbi-asn1-binary) + ("aso" . chemical/x-ncbi-asn1-binary) + ("asn" . chemical/x-ncbi-asn1-spec) + ("pdb" . chemical/x-pdb) + ("ent" . chemical/x-pdb) + ("ros" . chemical/x-rosdal) + ("sw" . chemical/x-swissprot) + ("vms" . chemical/x-vamas-iso14976) + ("vmd" . chemical/x-vmd) + ("xtel" . chemical/x-xtel) + ("xyz" . chemical/x-xyz) + ("gif" . image/gif) + ("ief" . image/ief) + ("jpeg" . image/jpeg) + ("jpg" . image/jpeg) + ("jpe" . image/jpeg) + ("pcx" . image/pcx) + ("png" . image/png) + ("svg" . image/svg+xml) + ("svgz" . image/svg+xml) + ("tiff" . image/tiff) + ("tif" . image/tiff) + ("djvu" . image/vnd.djvu) + ("djv" . image/vnd.djvu) + ("wbmp" . image/vnd.wap.wbmp) + ("cr2" . image/x-canon-cr2) + ("crw" . image/x-canon-crw) + ("ras" . image/x-cmu-raster) + ("cdr" . image/x-coreldraw) + ("pat" . image/x-coreldrawpattern) + ("cdt" . image/x-coreldrawtemplate) + ("cpt" . image/x-corelphotopaint) + ("erf" . image/x-epson-erf) + ("ico" . image/x-icon) + ("art" . image/x-jg) + ("jng" . image/x-jng) + ("bmp" . image/x-ms-bmp) + ("nef" . image/x-nikon-nef) + ("orf" . image/x-olympus-orf) + ("psd" . image/x-photoshop) + ("pnm" . image/x-portable-anymap) + ("pbm" . image/x-portable-bitmap) + ("pgm" . image/x-portable-graymap) + ("ppm" . image/x-portable-pixmap) + ("rgb" . image/x-rgb) + ("xbm" . image/x-xbitmap) + ("xpm" . image/x-xpixmap) + ("xwd" . image/x-xwindowdump) + ("eml" . message/rfc822) + ("igs" . model/iges) + ("iges" . model/iges) + ("msh" . model/mesh) + ("mesh" . model/mesh) + ("silo" . model/mesh) + ("wrl" . model/vrml) + ("vrml" . model/vrml) + ("x3dv" . model/x3d+vrml) + ("x3d" . model/x3d+xml) + ("x3db" . model/x3d+binary) + ("manifest" . text/cache-manifest) + ("ics" . text/calendar) + ("icz" . text/calendar) + ("css" . text/css) + ("csv" . text/csv) + ("323" . text/h323) + ("html" . text/html) + ("htm" . text/html) + ("shtml" . text/html) + ("uls" . text/iuls) + ("mml" . text/mathml) + ("asc" . text/plain) + ("txt" . text/plain) + ("text" . text/plain) + ("pot" . text/plain) + ("brf" . text/plain) + ("rtx" . text/richtext) + ("sct" . text/scriptlet) + ("wsc" . text/scriptlet) + ("tm" . text/texmacs) + ("ts" . text/texmacs) + ("tsv" . text/tab-separated-values) + ("jad" . text/vnd.sun.j2me.app-descriptor) + ("wml" . text/vnd.wap.wml) + ("wmls" . text/vnd.wap.wmlscript) + ("bib" . text/x-bibtex) + ("boo" . text/x-boo) + ("h++" . text/x-c++hdr) + ("hpp" . text/x-c++hdr) + ("hxx" . text/x-c++hdr) + ("hh" . text/x-c++hdr) + ("c++" . text/x-c++src) + ("cpp" . text/x-c++src) + ("cxx" . text/x-c++src) + ("cc" . text/x-c++src) + ("h" . text/x-chdr) + ("htc" . text/x-component) + ("csh" . text/x-csh) + ("c" . text/x-csrc) + ("d" . text/x-dsrc) + ("diff" . text/x-diff) + ("patch" . text/x-diff) + ("hs" . text/x-haskell) + ("java" . text/x-java) + ("lhs" . text/x-literate-haskell) + ("moc" . text/x-moc) + ("p" . text/x-pascal) + ("pas" . text/x-pascal) + ("gcd" . text/x-pcs-gcd) + ("pl" . text/x-perl) + ("pm" . text/x-perl) + ("py" . text/x-python) + ("scala" . text/x-scala) + ("etx" . text/x-setext) + ("sh" . text/x-sh) + ("tcl" . text/x-tcl) + ("tk" . text/x-tcl) + ("tex" . text/x-tex) + ("ltx" . text/x-tex) + ("sty" . text/x-tex) + ("cls" . text/x-tex) + ("vcs" . text/x-vcalendar) + ("vcf" . text/x-vcard) + ("json" . text/javascript) + ("3gp" . video/3gpp) + ("axv" . video/annodex) + ("dl" . video/dl) + ("dif" . video/dv) + ("dv" . video/dv) + ("fli" . video/fli) + ("gl" . video/gl) + ("mpeg" . video/mpeg) + ("mpg" . video/mpeg) + ("mpe" . video/mpeg) + ("mp4" . video/mp4) + ("qt" . video/quicktime) + ("mov" . video/quicktime) + ("ogv" . video/ogg) + ("mxu" . video/vnd.mpegurl) + ("flv" . video/x-flv) + ("lsf" . video/x-la-asf) + ("lsx" . video/x-la-asf) + ("mng" . video/x-mng) + ("asf" . video/x-ms-asf) + ("asx" . video/x-ms-asf) + ("wm" . video/x-ms-wm) + ("wmv" . video/x-ms-wmv) + ("wmx" . video/x-ms-wmx) + ("wvx" . video/x-ms-wvx) + ("avi" . video/x-msvideo) + ("movie" . video/x-sgi-movie) + ("mpv" . video/x-matroska) + ("mkv" . video/x-matroska) + ("ice" . x-conference/x-cooltalk) + ("sisx" . x-epoc/x-sisx-app) + ("vrm" . x-world/x-vrml) + ("vrml" . x-world/x-vrml) + ("wrl" . x-world/x-vrml)))) + +(define %file-ext-regexp + (make-regexp "(\\.(.*)|[~%])$")) + +(define (file-extension file-name) + "Return the file extension for FILE-NAME, or #f if one is not +found." + (and=> (regexp-exec %file-ext-regexp file-name) + (lambda (match) + (or (match:substring match 2) + (match:substring match 1))))) + +(define (mime-type file-name) + "Guess the MIME type for FILE-NAME based upon its file extension." + (or (hash-ref %mime-types (file-extension file-name)) + 'text/plain)) diff --git a/mudsync/networking.scm b/mudsync/networking.scm index b938c8a..1c28b38 100644 --- a/mudsync/networking.scm +++ b/mudsync/networking.scm @@ -32,6 +32,7 @@ #:use-module (web response) #:use-module (web uri) #:use-module (mudsync package-config) + #:use-module (mudsync contrib mime-types) #:use-module (rnrs io ports) #:export (;; Should we be exporting these? @@ -227,7 +228,9 @@ (head (title "Mudsync!") (meta (@ (charset "UTF-8"))) (link (@ (rel "stylesheet") - (href "/static/css/main.css")))) + (href "/static/css/main.css"))) + (script (@ (type "text/javascript") + (src "/static/js/mudsync.js")))) (body ,@body-tmpl))) (define (write-template-to-string) (with-fluids ((%default-port-encoding "UTF-8")) @@ -240,8 +243,7 @@ (define (view:render-static request body static-path) (values (build-response #:code 200 - ;; #:content-type (mime-type static-path) - ) + #:headers `((content-type . (,(mime-type static-path))))) (call-with-input-file (web-static-filepath static-path) get-bytevector-all))) (define (view:standard-four-oh-four . args) -- 2.31.1