This commit is contained in:
2026-03-04 18:15:45 +01:00
parent afa3778103
commit 3a2abf90f6
16 changed files with 1563 additions and 93 deletions

View File

@@ -3,15 +3,21 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Example of racket webview</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<link href="/styles.css" rel="stylesheet" />
</head>
<body>
<h1>Example</h1>
<h1 id="h1">Example</h1>
<p>
Please press this <button id="btn">Button</button> for something to happen.
</p>
<p>
Some input text: <input type="Text" id="inp1" value="Default input value" />
</p>
<div id="test" class="yellow">
<p> Hi there!</p>
</div>
<h1 id="t" class="blue">Ja</h1>
Ja
<h1> Nou...</h1>
</body>
</html>

View File

@@ -1,4 +1,23 @@
body {
font-family: Arial;
font-family: sans-serif;
font-size: 11pt;
}
}
.yellow, div.yellow {
background: yellow;
color: blue;
}
.flop, div.flop {
font-weight: bold;
}
h1.yellow {
background: green;
}
h1.blue {
color: red;
}

View File

@@ -48,7 +48,7 @@ window.rkt_bind_evt_ids = function(win_nr, selector, event_kind) {
try {
let nodelist = document.querySelectorAll(selector);
if (nodelist === undefined || nodelist === null) {
return 'json:[]';
return [];
}
let ids = [];
nodelist.forEach(function(el) {
@@ -68,9 +68,27 @@ window.rkt_bind_evt_ids = function(win_nr, selector, event_kind) {
ids.push(info);
}
});
return 'json:' + JSON.stringify(ids);
return ids;
} catch(e) {
return 'json:[]';
return [];
}
};
window.rkt_with_selector = function(selector, func) {
let nodelist = document.querySelectorAll(selector);
if (nodelist === undefined || nodelist === null) {
return [];
}
let results = [];
let applier = function(el) {
let id = el.getAttribute('id');
results.push(func(id, el));
}
nodelist.forEach(applier);
let c = results.length;
let r = { 'applied-to-elements': c, 'with-ids': results.filter((id) => id !== null) };
return r;
}

Binary file not shown.

Binary file not shown.

725
private/mimetypes.rkt Normal file
View File

@@ -0,0 +1,725 @@
#lang racket/base
(require racket/contract)
(provide mimetype-for-ext)
(define/contract (mimetype-for-ext ext)
(-> (or/c string? symbol?) string?)
(hash-ref mimetypes
(if (string? ext) (string->symbol ext) ext)
"application/octet-stream"))
(define mimetypes (make-hash))
(define-syntax addMimeType
(syntax-rules ()
((_ description http-mimetype extensions description2)
(for-each (λ (mimetype)
(unless (hash-has-key? mimetypes mimetype)
(hash-set! mimetypes mimetype http-mimetype)))
extensions))))
(addMimeType "3D Crossword Plugin" "application/vnd.hzn-3d-crossword" '(x3d) "IANA: 3D Crossword Plugin")
(addMimeType "3GP" "video/3gpp" '(3gp) "Wikipedia: 3GP")
(addMimeType "3GP2" "video/3gpp2" '(3g2) "Wikipedia: 3G2")
(addMimeType "3GPP MSEQ File" "application/vnd.mseq" '(mseq) "IANA: 3GPP MSEQ File")
(addMimeType "3M Post It Notes" "application/vnd.3m.post-it-notes" '(pwn) "IANA: 3M Post It Notes")
(addMimeType "3rd Generation Partnership Project - Pic Large" "application/vnd.3gpp.pic-bw-large" '(plb) "3GPP")
(addMimeType "3rd Generation Partnership Project - Pic Small" "application/vnd.3gpp.pic-bw-small" '(psb) "3GPP")
(addMimeType "3rd Generation Partnership Project - Pic Var" "application/vnd.3gpp.pic-bw-var" '(pvb) "3GPP")
(addMimeType "3rd Generation Partnership Project - Transaction Capabilities Application Part" "application/vnd.3gpp2.tcap" '(tcap) "3GPP")
(addMimeType "7-Zip" "application/x-7z-compressed" '(7z) "Wikipedia: 7-Zip")
(addMimeType "AbiWord" "application/x-abiword" '(abw) "Wikipedia: AbiWord")
(addMimeType "Ace Archive" "application/x-ace-compressed" '(ace) "Wikipedia: ACE")
(addMimeType "Active Content Compression" "application/vnd.americandynamics.acc" '(acc) "IANA: Active Content Compression")
(addMimeType "ACU Cobol" "application/vnd.acucobol" '(acu) "IANA: ACU Cobol")
(addMimeType "ACU Cobol" "application/vnd.acucorp" '(atc) "IANA: ACU Cobol")
(addMimeType "Adaptive differential pulse-code modulation" "audio/adpcm" '(adp) "Wikipedia: ADPCM")
(addMimeType "Adobe (Macropedia) Authorware - Binary File" "application/x-authorware-bin" '(aab) "Wikipedia: Authorware")
(addMimeType "Adobe (Macropedia) Authorware - Map" "application/x-authorware-map" '(aam) "Wikipedia: Authorware")
(addMimeType "Adobe (Macropedia) Authorware - Segment File" "application/x-authorware-seg" '(aas) "Wikipedia: Authorware")
(addMimeType "Adobe AIR Application" "application/vnd.adobe.air-application-installer-package+zip" '(air) "Building AIR Applications")
(addMimeType "Adobe Flash" "application/x-shockwave-flash" '(swf) "Wikipedia: Adobe Flash")
(addMimeType "Adobe Flex Project" "application/vnd.adobe.fxp" '(fxp) "IANA: Adobe Flex Project")
(addMimeType "Adobe Portable Document Format" "application/pdf" '(pdf) "Adobe PDF")
(addMimeType "Adobe PostScript Printer Description File Format" "application/vnd.cups-ppd" '(ppd) "IANA: Cups")
(addMimeType "Adobe Shockwave Player" "application/x-director" '(dir) "Wikipedia: Adobe Shockwave Player")
(addMimeType "Adobe XML Data Package" "application/vnd.adobe.xdp+xml" '(xdp) "Wikipedia: XML Data Package")
(addMimeType "Adobe XML Forms Data Format" "application/vnd.adobe.xfdf" '(xfdf) "Wikipedia: XML Portable Document Format")
(addMimeType "Advanced Audio Coding (AAC)" "audio/x-aac" '(aac) "Wikipedia: AAC")
(addMimeType "Ahead AIR Application" "application/vnd.ahead.space" '(ahead) "IANA: Ahead AIR Application")
(addMimeType "AirZip FileSECURE" "application/vnd.airzip.filesecure.azf" '(azf) "IANA: AirZip")
(addMimeType "AirZip FileSECURE" "application/vnd.airzip.filesecure.azs" '(azs) "IANA: AirZip")
(addMimeType "Amazon Kindle eBook format" "application/vnd.amazon.ebook" '(azw) "Kindle Direct Publishing")
(addMimeType "AmigaDE" "application/vnd.amiga.ami" '(ami) "IANA: Amiga")
(addMimeType "Andrew Toolkit" "application/andrew-inset" '(N/A) "IANA - Andrew Inset")
(addMimeType "Android Package Archive" "application/vnd.android.package-archive" '(apk) "Wikipedia: APK File Format")
(addMimeType "ANSER-WEB Terminal Client - Certificate Issue" "application/vnd.anser-web-certificate-issue-initiation" '(cii) "IANA: ANSWER-WEB")
(addMimeType "ANSER-WEB Terminal Client - Web Funds Transfer" "application/vnd.anser-web-funds-transfer-initiation" '(fti) "IANA: ANSWER-WEB")
(addMimeType "Antix Game Player" "application/vnd.antix.game-component" '(atx) "IANA: Antix Game Component")
(addMimeType "Apple Disk Image" "application/x-apple-diskimage" '(dmg) "Apple Disk Image")
(addMimeType "Apple Installer Package" "application/vnd.apple.installer+xml" '(mpkg) "IANA: Apple Installer")
(addMimeType "Applixware" "application/applixware" '(aw) "Vistasource")
(addMimeType "Archipelago Lesson Player" "application/vnd.hhe.lesson-player" '(les) "IANA: Archipelago Lesson Player")
(addMimeType "Archive document - Multiple Fils Embedded" "application/x-freearc" '(arc) "FreeArc")
(addMimeType "Arista Networks Software Image" "application/vnd.aristanetworks.swi" '(swi) "IANA: Arista Networks Software Image")
(addMimeType "Assembler Source File" "text/x-asm" '(s) "Wikipedia: Assembly")
(addMimeType "Atom Publishing Protocol" "application/atomcat+xml" '(atomcat) "RFC 5023")
(addMimeType "Atom Publishing Protocol Service Document" "application/atomsvc+xml" '(atomsvc) "RFC 5023")
(addMimeType "Atom Syndication Format" "application/atom+xml" '(atom xml) "RFC 4287")
(addMimeType "Attribute Certificate" "application/pkix-attr-cert" '(ac) "RFC 5877")
(addMimeType "Audio Interchange File Format" "audio/x-aiff" '(aif) "Wikipedia: Audio Interchange File Format")
(addMimeType "Audio Video Interleave (AVI)" "video/x-msvideo" '(avi) "Wikipedia: AVI")
(addMimeType "Audiograph" "application/vnd.audiograph" '(aep) "IANA: Audiograph")
(addMimeType "AutoCAD DXF" "image/vnd.dxf" '(dxf) "Wikipedia: AutoCAD DXF")
(addMimeType "Autodesk Design Web Format (DWF)" "model/vnd.dwf" '(dwf) "Wikipedia: Design Web Format")
(addMimeType "AV1 Image File" "image/avif" '(avif) "AV1 Image File Format")
(addMimeType "BAS Partitur Format" "text/plain-bas" '(par) "Phonetik BAS")
(addMimeType "Binary CPIO Archive" "application/x-bcpio" '(bcpio) "Wikipedia: cpio")
(addMimeType "Binary Data" "application/octet-stream" '(bin) "")
(addMimeType "Bitmap Image File" "image/bmp" '(bmp) "Wikipedia: BMP File Format")
(addMimeType "BitTorrent" "application/x-bittorrent" '(torrent) "Wikipedia: BitTorrent")
(addMimeType "Blackberry COD File" "application/vnd.rim.cod" '(cod) "")
(addMimeType "Blueice Research Multipass" "application/vnd.blueice.multipass" '(mpm) "IANA: Multipass")
(addMimeType "BMI Drawing Data Interchange" "application/vnd.bmi" '(bmi) "IANA: BMI")
(addMimeType "Bourne Shell Script" "application/x-sh" '(sh) "Wikipedia: Bourne Shell")
(addMimeType "BTIF" "image/prs.btif" '(btif) "IANA: BTIF")
(addMimeType "BusinessObjects" "application/vnd.businessobjects" '(rep) "IANA: BusinessObjects")
(addMimeType "Bzip Archive" "application/x-bzip" '(bz) "Wikipedia: Bzip")
(addMimeType "Bzip2 Archive" "application/x-bzip2" '(bz2) "Wikipedia: Bzip")
(addMimeType "C Shell Script" "application/x-csh" '(csh) "Wikipedia: C Shell")
(addMimeType "C Source File" "text/x-c" '(c) "Wikipedia: C Programming Language")
(addMimeType "CambridgeSoft Chem Draw" "application/vnd.chemdraw+xml" '(cdxml) "IANA: Chem Draw")
(addMimeType "Cascading Style Sheets (CSS)" "text/css" '(css) "Wikipedia: CSS")
(addMimeType "CD Audio" "application/x-cdf" '(cda) "Wikipedia: CDA File")
(addMimeType "ChemDraw eXchange file" "chemical/x-cdx" '(cdx) "ChemDraw eXchange file")
(addMimeType "Chemical Markup Language" "chemical/x-cml" '(cml) "Wikipedia: Chemical Markup Language")
(addMimeType "Chemical Style Markup Language" "chemical/x-csml" '(csml) "Wikipedia: Chemical Style Markup Language")
(addMimeType "CIM Database" "application/vnd.contact.cmsg" '(cdbcmsg) "IANA: CIM Database")
(addMimeType "Claymore Data Files" "application/vnd.claymore" '(cla) "IANA: Claymore")
(addMimeType "Clonk Game" "application/vnd.clonk.c4group" '(c4g) "IANA: Clonk")
(addMimeType "Close Captioning - Subtitle" "image/vnd.dvb.subtitle" '(sub) "Wikipedia: Closed Captioning")
(addMimeType "Cloud Data Management Interface (CDMI) - Capability" "application/cdmi-capability" '(cdmia) "RFC 6208")
(addMimeType "Cloud Data Management Interface (CDMI) - Contaimer" "application/cdmi-container" '(cdmic) "RFC 6209")
(addMimeType "Cloud Data Management Interface (CDMI) - Domain" "application/cdmi-domain" '(cdmid) "RFC 6210")
(addMimeType "Cloud Data Management Interface (CDMI) - Object" "application/cdmi-object" '(cdmio) "RFC 6211")
(addMimeType "Cloud Data Management Interface (CDMI) - Queue" "application/cdmi-queue" '(cdmiq) "RFC 6212")
(addMimeType "ClueTrust CartoMobile - Config" "application/vnd.cluetrust.cartomobile-config" '(c11amc) "IANA: CartoMobile")
(addMimeType "ClueTrust CartoMobile - Config Package" "application/vnd.cluetrust.cartomobile-config-pkg" '(c11amz) "IANA: CartoMobile")
(addMimeType "CMU Image" "image/x-cmu-raster" '(ras) "")
(addMimeType "COLLADA" "model/vnd.collada+xml" '(dae) "IANA: COLLADA")
(addMimeType "Comma-Seperated Values" "text/csv" '(csv) "Wikipedia: CSV")
(addMimeType "Compact Pro" "application/mac-compactpro" '(cpt) "Compact Pro")
(addMimeType "Compiled Wireless Markup Language (WMLC)" "application/vnd.wap.wmlc" '(wmlc) "IANA: WMLC")
(addMimeType "Computer Graphics Metafile" "image/cgm" '(cgm) "Wikipedia: Computer Graphics Metafile")
(addMimeType "CoolTalk" "x-conference/x-cooltalk" '(ice) "Wikipedia: CoolTalk")
(addMimeType "Corel Metafile Exchange (CMX)" "image/x-cmx" '(cmx) "Wikipedia: CorelDRAW")
(addMimeType "CorelXARA" "application/vnd.xara" '(xar) "IANA: CorelXARA")
(addMimeType "CosmoCaller" "application/vnd.cosmocaller" '(cmc) "IANA: CosmoCaller")
(addMimeType "CPIO Archive" "application/x-cpio" '(cpio) "Wikipedia: cpio")
(addMimeType "CrickSoftware - Clicker" "application/vnd.crick.clicker" '(clkx) "IANA: Clicker")
(addMimeType "CrickSoftware - Clicker - Keyboard" "application/vnd.crick.clicker.keyboard" '(clkk) "IANA: Clicker")
(addMimeType "CrickSoftware - Clicker - Palette" "application/vnd.crick.clicker.palette" '(clkp) "IANA: Clicker")
(addMimeType "CrickSoftware - Clicker - Template" "application/vnd.crick.clicker.template" '(clkt) "IANA: Clicker")
(addMimeType "CrickSoftware - Clicker - Wordbank" "application/vnd.crick.clicker.wordbank" '(clkw) "IANA: Clicker")
(addMimeType "Critical Tools - PERT Chart EXPERT" "application/vnd.criticaltools.wbs+xml" '(wbs) "IANA: Critical Tools")
(addMimeType "CryptoNote" "application/vnd.rig.cryptonote" '(cryptonote) "IANA: CryptoNote")
(addMimeType "Crystallographic Interchange Format" "chemical/x-cif" '(cif) "Crystallographic Interchange Format")
(addMimeType "CrystalMaker Data Format" "chemical/x-cmdf" '(cmdf) "CrystalMaker Data Format")
(addMimeType "CU-SeeMe" "application/cu-seeme" '(cu) "White Pine")
(addMimeType "CU-Writer" "application/prs.cww" '(cww) "")
(addMimeType "Curl - Applet" "text/vnd.curl" '(curl) "Curl Applet")
(addMimeType "Curl - Detached Applet" "text/vnd.curl.dcurl" '(dcurl) "Curl Detached Applet")
(addMimeType "Curl - Manifest File" "text/vnd.curl.mcurl" '(mcurl) "Curl Manifest File")
(addMimeType "Curl - Source Code" "text/vnd.curl.scurl" '(scurl) "Curl Source Code")
(addMimeType "CURL Applet" "application/vnd.curl.car" '(car) "IANA: CURL Applet")
(addMimeType "CURL Applet" "application/vnd.curl.pcurl" '(pcurl) "IANA: CURL Applet")
(addMimeType "CustomMenu" "application/vnd.yellowriver-custom-menu" '(cmp) "IANA: CustomMenu")
(addMimeType "Data Structure for the Security Suitability of Cryptographic Algorithms" "application/dssc+der" '(dssc) "RFC 5698")
(addMimeType "Data Structure for the Security Suitability of Cryptographic Algorithms" "application/dssc+xml" '(xdssc) "RFC 5698")
(addMimeType "Debian Package" "application/x-debian-package" '(deb) "Wikipedia: Debian Package")
(addMimeType "DECE Audio" "audio/vnd.dece.audio" '(uva) "IANA: Dece Audio")
(addMimeType "DECE Graphic" "image/vnd.dece.graphic" '(uvi) "IANA: DECE Graphic")
(addMimeType "DECE High Definition Video" "video/vnd.dece.hd" '(uvh) "IANA: DECE HD Video")
(addMimeType "DECE Mobile Video" "video/vnd.dece.mobile" '(uvm) "IANA: DECE Mobile Video")
(addMimeType "DECE MP4" "video/vnd.uvvu.mp4" '(uvu) "IANA: DECE MP4")
(addMimeType "DECE PD Video" "video/vnd.dece.pd" '(uvp) "IANA: DECE PD Video")
(addMimeType "DECE SD Video" "video/vnd.dece.sd" '(uvs) "IANA: DECE SD Video")
(addMimeType "DECE Video" "video/vnd.dece.video" '(uvv) "IANA: DECE Video")
(addMimeType "Device Independent File Format (DVI)" "application/x-dvi" '(dvi) "Wikipedia: DVI")
(addMimeType "Digital Siesmograph Networks - SEED Datafiles" "application/vnd.fdsn.seed" '(seed) "IANA: SEED")
(addMimeType "Digital Talking Book" "application/x-dtbook+xml" '(dtb) "Wikipedia: EPUB")
(addMimeType "Digital Talking Book - Resource File" "application/x-dtbresource+xml" '(res) "Digital Talking Book")
(addMimeType "Digital Video Broadcasting" "application/vnd.dvb.ait" '(ait) "IANA: Digital Video Broadcasting")
(addMimeType "Digital Video Broadcasting" "application/vnd.dvb.service" '(svc) "IANA: Digital Video Broadcasting")
(addMimeType "Digital Winds Music" "audio/vnd.digital-winds" '(eol) "IANA: Digital Winds")
(addMimeType "DjVu" "image/vnd.djvu" '(djvu) "Wikipedia: DjVu")
(addMimeType "Document Type Definition" "application/xml-dtd" '(dtd) "W3C DTD")
(addMimeType "Dolby Meridian Lossless Packing" "application/vnd.dolby.mlp" '(mlp) "IANA: Dolby Meridian Lossless Packing")
(addMimeType "Doom Video Game" "application/x-doom" '(wad) "Wikipedia: Doom WAD")
(addMimeType "DPGraph" "application/vnd.dpgraph" '(dpg) "IANA: DPGraph")
(addMimeType "DRA Audio" "audio/vnd.dra" '(dra) "IANA: DRA")
(addMimeType "DreamFactory" "application/vnd.dreamfactory" '(dfac) "IANA: DreamFactory")
(addMimeType "DTS Audio" "audio/vnd.dts" '(dts) "IANA: DTS")
(addMimeType "DTS High Definition Audio" "audio/vnd.dts.hd" '(dtshd) "IANA: DTS HD")
(addMimeType "DWG Drawing" "image/vnd.dwg" '(dwg) "Wikipedia: DWG")
(addMimeType "DynaGeo" "application/vnd.dynageo" '(geo) "IANA: DynaGeo")
(addMimeType "ECMAScript" "application/ecmascript" '(es) "ECMA-357")
(addMimeType "EcoWin Chart" "application/vnd.ecowin.chart" '(mag) "IANA: EcoWin Chart")
(addMimeType "EDMICS 2000" "image/vnd.fujixerox.edmics-mmr" '(mmr) "IANA: EDMICS 2000")
(addMimeType "EDMICS 2000" "image/vnd.fujixerox.edmics-rlc" '(rlc) "IANA: EDMICS 2000")
(addMimeType "Efficient XML Interchange" "application/exi" '(exi) "Efficient XML Interchange (EXI) Best Practices")
(addMimeType "EFI Proteus" "application/vnd.proteus.magazine" '(mgz) "IANA: EFI Proteus")
(addMimeType "Electronic Publication" "application/epub+zip" '(epub) "Wikipedia: EPUB")
(addMimeType "Email Message" "message/rfc822" '(eml) "RFC 2822")
(addMimeType "Enliven Viewer" "application/vnd.enliven" '(nml) "IANA: Enliven Viewer")
(addMimeType "Express by Infoseek" "application/vnd.is-xpr" '(xpr) "IANA: Express by Infoseek")
(addMimeType "eXtended Image File Format (XIFF)" "image/vnd.xiff" '(xif) "IANA: XIFF")
(addMimeType "Extensible Forms Description Language" "application/vnd.xfdl" '(xfdl) "IANA: Extensible Forms Description Language")
(addMimeType "Extensible MultiModal Annotation" "application/emma+xml" '(emma) "EMMA: Extensible MultiModal Annotation markup language")
(addMimeType "EZPix Secure Photo Album" "application/vnd.ezpix-album" '(ez2) "IANA: EZPix Secure Photo Album")
(addMimeType "EZPix Secure Photo Album" "application/vnd.ezpix-package" '(ez3) "IANA: EZPix Secure Photo Album")
(addMimeType "FAST Search & Transfer ASA" "image/vnd.fst" '(fst) "IANA: FAST Search & Transfer ASA")
(addMimeType "FAST Search & Transfer ASA" "video/vnd.fvt" '(fvt) "IANA: FVT")
(addMimeType "FastBid Sheet" "image/vnd.fastbidsheet" '(fbs) "IANA: FastBid Sheet")
(addMimeType "FCS Express Layout Link" "application/vnd.denovo.fcselayout-link" '(fe_launch) "IANA: FCS Express Layout Link")
(addMimeType "Flash Video" "video/x-f4v" '(f4v) "Wikipedia: Flash Video")
(addMimeType "Flash Video" "video/x-flv" '(flv) "Wikipedia: Flash Video")
(addMimeType "FlashPix" "image/vnd.fpx" '(fpx) "IANA: FPX")
(addMimeType "FlashPix" "image/vnd.net-fpx" '(npx) "IANA: FPX")
(addMimeType "FLEXSTOR" "text/vnd.fmi.flexstor" '(flx) "IANA: FLEXSTOR")
(addMimeType "FLI/FLC Animation Format" "video/x-fli" '(fli) "FLI/FLC Animation Format")
(addMimeType "FluxTime Clip" "application/vnd.fluxtime.clip" '(ftc) "IANA: FluxTime Clip")
(addMimeType "Forms Data Format" "application/vnd.fdf" '(fdf) "IANA: Forms Data Format")
(addMimeType "Fortran Source File" "text/x-fortran" '(f) "Wikipedia: Fortran")
(addMimeType "FrameMaker Interchange Format" "application/vnd.mif" '(mif) "IANA: FrameMaker Interchange Format")
(addMimeType "FrameMaker Normal Format" "application/vnd.framemaker" '(fm) "IANA: FrameMaker")
(addMimeType "FreeHand MX" "image/x-freehand" '(fh) "Wikipedia: Macromedia Freehand")
(addMimeType "Friendly Software Corporation" "application/vnd.fsc.weblaunch" '(fsc) "IANA: Friendly Software Corporation")
(addMimeType "Frogans Player" "application/vnd.frogans.fnc" '(fnc) "IANA: Frogans Player")
(addMimeType "Frogans Player" "application/vnd.frogans.ltf" '(ltf) "IANA: Frogans Player")
(addMimeType "Fujitsu - Xerox 2D CAD Data" "application/vnd.fujixerox.ddd" '(ddd) "IANA: Fujitsu DDD")
(addMimeType "Fujitsu - Xerox DocuWorks" "application/vnd.fujixerox.docuworks" '(xdw) "IANA: Docuworks")
(addMimeType "Fujitsu - Xerox DocuWorks Binder" "application/vnd.fujixerox.docuworks.binder" '(xbd) "IANA: Docuworks Binder")
(addMimeType "Fujitsu Oasys" "application/vnd.fujitsu.oasys" '(oas) "IANA: Fujitsu Oasys")
(addMimeType "Fujitsu Oasys" "application/vnd.fujitsu.oasys2" '(oa2) "IANA: Fujitsu Oasys")
(addMimeType "Fujitsu Oasys" "application/vnd.fujitsu.oasys3" '(oa3) "IANA: Fujitsu Oasys")
(addMimeType "Fujitsu Oasys" "application/vnd.fujitsu.oasysgp" '(fg5) "IANA: Fujitsu Oasys")
(addMimeType "Fujitsu Oasys" "application/vnd.fujitsu.oasysprs" '(bh2) "IANA: Fujitsu Oasys")
(addMimeType "FutureSplash Animator" "application/x-futuresplash" '(spl) "Wikipedia: FutureSplash Animator")
(addMimeType "FuzzySheet" "application/vnd.fuzzysheet" '(fzs) "IANA: FuzySheet")
(addMimeType "G3 Fax Image" "image/g3fax" '(g3) "Wikipedia: G3 Fax Image")
(addMimeType "GameMaker ActiveX" "application/vnd.gmx" '(gmx) "IANA: GameMaker ActiveX")
(addMimeType "Gen-Trix Studio" "model/vnd.gtw" '(gtw) "IANA: GTW")
(addMimeType "Genomatix Tuxedo Framework" "application/vnd.genomatix.tuxedo" '(txd) "IANA: Genomatix Tuxedo Framework")
(addMimeType "GeoGebra" "application/vnd.geogebra.file" '(ggb) "IANA: GeoGebra")
(addMimeType "GeoGebra" "application/vnd.geogebra.tool" '(ggt) "IANA: GeoGebra")
(addMimeType "Geometric Description Language (GDL)" "model/vnd.gdl" '(gdl) "IANA: GDL")
(addMimeType "GeoMetry Explorer" "application/vnd.geometry-explorer" '(gex) "IANA: GeoMetry Explorer")
(addMimeType "GEONExT and JSXGraph" "application/vnd.geonext" '(gxt) "IANA: GEONExT and JSXGraph")
(addMimeType "GeoplanW" "application/vnd.geoplan" '(g2w) "IANA: GeoplanW")
(addMimeType "GeospacW" "application/vnd.geospace" '(g3w) "IANA: GeospacW")
(addMimeType "Ghostscript Font" "application/x-font-ghostscript" '(gsf) "Wikipedia: Ghostscript")
(addMimeType "Glyph Bitmap Distribution Format" "application/x-font-bdf" '(bdf) "Wikipedia: Glyph Bitmap Distribution Format")
(addMimeType "GNU Tar Files" "application/x-gtar" '(gtar) "GNU Tar")
(addMimeType "GNU Texinfo Document" "application/x-texinfo" '(texinfo) "Wikipedia: Texinfo")
(addMimeType "Gnumeric" "application/x-gnumeric" '(gnumeric) "Wikipedia: Gnumeric")
(addMimeType "Google Earth - KML" "application/vnd.google-earth.kml+xml" '(kml) "IANA: Google Earth")
(addMimeType "Google Earth - Zipped KML" "application/vnd.google-earth.kmz" '(kmz) "IANA: Google Earth")
(addMimeType "GPS eXchange Format" "application/gpx+xml" '(gpx) "GPS eXchange Format")
(addMimeType "GrafEq" "application/vnd.grafeq" '(gqf) "IANA: GrafEq")
(addMimeType "Graphics Interchange Format" "image/gif" '(gif) "Wikipedia: Graphics Interchange Format")
(addMimeType "Graphviz" "text/vnd.graphviz" '(gv) "IANA: Graphviz")
(addMimeType "Groove - Account" "application/vnd.groove-account" '(gac) "IANA: Groove")
(addMimeType "Groove - Help" "application/vnd.groove-help" '(ghf) "IANA: Groove")
(addMimeType "Groove - Identity Message" "application/vnd.groove-identity-message" '(gim) "IANA: Groove")
(addMimeType "Groove - Injector" "application/vnd.groove-injector" '(grv) "IANA: Groove")
(addMimeType "Groove - Tool Message" "application/vnd.groove-tool-message" '(gtm) "IANA: Groove")
(addMimeType "Groove - Tool Template" "application/vnd.groove-tool-template" '(tpl) "IANA: Groove")
(addMimeType "Groove - Vcard" "application/vnd.groove-vcard" '(vcg) "IANA: Groove")
(addMimeType "GZip" "application/gzip" '(gz) "Wikipedia: GZip")
(addMimeType "H.261" "video/h261" '(h261) "Wikipedia: H.261")
(addMimeType "H.263" "video/h263" '(h263) "Wikipedia: H.263")
(addMimeType "H.264" "video/h264" '(h264) "Wikipedia: H.264")
(addMimeType "Hewlett Packard Instant Delivery" "application/vnd.hp-hpid" '(hpid) "IANA: Hewlett Packard Instant Delivery")
(addMimeType "Hewlett-Packard's WebPrintSmart" "application/vnd.hp-hps" '(hps) "IANA: Hewlett-Packard's WebPrintSmart")
(addMimeType "Hierarchical Data Format" "application/x-hdf" '(hdf) "Wikipedia: Hierarchical Data Format")
(addMimeType "Hit'n'Mix" "audio/vnd.rip" '(rip) "IANA: Hit'n'Mix")
(addMimeType "Homebanking Computer Interface (HBCI)" "application/vnd.hbci" '(hbci) "IANA: HBCI")
(addMimeType "HP Indigo Digital Press - Job Layout Languate" "application/vnd.hp-jlyt" '(jlt) "IANA: HP Job Layout Language")
(addMimeType "HP Printer Command Language" "application/vnd.hp-pcl" '(pcl) "IANA: HP Printer Command Language")
(addMimeType "HP-GL/2 and HP RTL" "application/vnd.hp-hpgl" '(hpgl) "IANA: HP-GL/2 and HP RTL")
(addMimeType "HV Script" "application/vnd.yamaha.hv-script" '(hvs) "IANA: HV Script")
(addMimeType "HV Voice Dictionary" "application/vnd.yamaha.hv-dic" '(hvd) "IANA: HV Voice Dictionary")
(addMimeType "HV Voice Parameter" "application/vnd.yamaha.hv-voice" '(hvp) "IANA: HV Voice Parameter")
(addMimeType "Hydrostatix Master Suite" "application/vnd.hydrostatix.sof-data" '(sfd-hdstx) "IANA: Hydrostatix Master Suite")
(addMimeType "Hyperstudio" "application/hyperstudio" '(stk) "IANA - Hyperstudio")
(addMimeType "Hypertext Application Language" "application/vnd.hal+xml" '(hal) "IANA: HAL")
(addMimeType "HyperText Markup Language (HTML)" "text/html" '(html) "Wikipedia: HTML")
(addMimeType "IBM DB2 Rights Manager" "application/vnd.ibm.rights-management" '(irm) "IANA: IBM DB2 Rights Manager")
(addMimeType "IBM Electronic Media Management System - Secure Container" "application/vnd.ibm.secure-container" '(sc) "IANA: EMMS")
(addMimeType "iCalendar" "text/calendar" '(ics) "Wikipedia: iCalendar")
(addMimeType "ICC profile" "application/vnd.iccprofile" '(icc) "IANA: ICC profile")
(addMimeType "Icon Image" "image/x-icon" '(ico) "Wikipedia: ICO File Format")
(addMimeType "igLoader" "application/vnd.igloader" '(igl) "IANA: igLoader")
(addMimeType "Image Exchange Format" "image/ief" '(ief) "RFC 1314")
(addMimeType "ImmerVision PURE Players" "application/vnd.immervision-ivp" '(ivp) "IANA: ImmerVision PURE Players")
(addMimeType "ImmerVision PURE Players" "application/vnd.immervision-ivu" '(ivu) "IANA: ImmerVision PURE Players")
(addMimeType "IMS Networks" "application/reginfo+xml" '(rif) "")
(addMimeType "In3D - 3DML" "text/vnd.in3d.3dml" '(3dml) "IANA: In3D")
(addMimeType "In3D - 3DML" "text/vnd.in3d.spot" '(spot) "IANA: In3D")
(addMimeType "Initial Graphics Exchange Specification (IGES)" "model/iges" '(igs) "Wikipedia: IGES")
(addMimeType "Interactive Geometry Software" "application/vnd.intergeo" '(i2g) "IANA: Interactive Geometry Software")
(addMimeType "Interactive Geometry Software Cinderella" "application/vnd.cinderella" '(cdy) "IANA: Cinderella")
(addMimeType "Intercon FormNet" "application/vnd.intercon.formnet" '(xpw) "IANA: Intercon FormNet")
(addMimeType "International Society for Advancement of Cytometry" "application/vnd.isac.fcs" '(fcs) "IANA: International Society for Advancement of Cytometry")
(addMimeType "Internet Protocol Flow Information Export" "application/ipfix" '(ipfix) "RFC 3917")
(addMimeType "Internet Public Key Infrastructure - Certificate" "application/pkix-cert" '(cer) "RFC 2585")
(addMimeType "Internet Public Key Infrastructure - Certificate Management Protocole" "application/pkixcmp" '(pki) "RFC 2585")
(addMimeType "Internet Public Key Infrastructure - Certificate Revocation Lists" "application/pkix-crl" '(crl) "RFC 2585")
(addMimeType "Internet Public Key Infrastructure - Certification Path" "application/pkix-pkipath" '(pkipath) "RFC 2585")
(addMimeType "IOCOM Visimeet" "application/vnd.insors.igm" '(igm) "IANA: IOCOM Visimeet")
(addMimeType "IP Unplugged Roaming Client" "application/vnd.ipunplugged.rcprofile" '(rcprofile) "IANA: IP Unplugged Roaming Client")
(addMimeType "iRepository / Lucidoc Editor" "application/vnd.irepository.package+xml" '(irp) "IANA: iRepository / Lucidoc Editor")
(addMimeType "J2ME App Descriptor" "text/vnd.sun.j2me.app-descriptor" '(jad) "IANA: J2ME App Descriptor")
(addMimeType "Java Archive" "application/java-archive" '(jar) "Wikipedia: JAR file format")
(addMimeType "Java Bytecode File" "application/java-vm" '(class) "Wikipedia: Java Bytecode")
(addMimeType "Java Network Launching Protocol" "application/x-java-jnlp-file" '(jnlp) "Wikipedia: Java Web Start")
(addMimeType "Java Serialized Object" "application/java-serialized-object" '(ser) "Java Serialization API")
(addMimeType "Java Source File" "text/x-java-source,java" '(java) "Wikipedia: Java")
(addMimeType "JavaScript" "application/javascript" '(js) "JavaScript")
(addMimeType "JavaScript Module" "text/javascript" '(mjs) "Wikipedia: Javascript")
(addMimeType "JavaScript Module" "text/javascript" '(mjs) "ECMAScript modules")
(addMimeType "JavaScript Object Notation (JSON)" "application/json" '(json) "Wikipedia: JSON")
(addMimeType "Joda Archive" "application/vnd.joost.joda-archive" '(joda) "IANA: Joda Archive")
(addMimeType "JPEG Image" "image/jpeg" '(jpeg jpg) "RFC 1314")
(addMimeType "JPEG 2000 Compound Image File Format" "video/jpm" '(jpm) "IANA: JPM")
(addMimeType "JPEG Image (Citrix client)" "image/x-citrix-jpeg" '(jpeg jpg) "RFC 1314")
(addMimeType "JPEG Image (Progressive)" "image/pjpeg" '(pjpeg) "JPEG image compression FAQ")
(addMimeType "JPGVideo" "video/jpeg" '(jpgv) "RFC 3555")
(addMimeType "JSON - Linked Data" "application/ld+json" '(jsonld) "Wikipedia: JSON-LD")
(addMimeType "Kahootz" "application/vnd.kahootz" '(ktz) "IANA: Kahootz")
(addMimeType "Karaoke on Chipnuts Chipsets" "application/vnd.chipnuts.karaoke-mmd" '(mmd) "IANA: Chipnuts Karaoke")
(addMimeType "KDE KOffice Office Suite - Karbon" "application/vnd.kde.karbon" '(karbon) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - KChart" "application/vnd.kde.kchart" '(chrt) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kformula" "application/vnd.kde.kformula" '(kfo) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kivio" "application/vnd.kde.kivio" '(flw) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kontour" "application/vnd.kde.kontour" '(kon) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kpresenter" "application/vnd.kde.kpresenter" '(kpr) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kspread" "application/vnd.kde.kspread" '(ksp) "IANA: KDE KOffice Office Suite")
(addMimeType "KDE KOffice Office Suite - Kword" "application/vnd.kde.kword" '(kwd) "IANA: KDE KOffice Office Suite")
(addMimeType "Kenamea App" "application/vnd.kenameaapp" '(htke) "IANA: Kenamea App")
(addMimeType "Kidspiration" "application/vnd.kidspiration" '(kia) "IANA: Kidspiration")
(addMimeType "Kinar Applications" "application/vnd.kinar" '(kne) "IANA: Kina Applications")
(addMimeType "Kodak Storyshare" "application/vnd.kodak-descriptor" '(sse) "IANA: Kodak Storyshare")
(addMimeType "Laser App Enterprise" "application/vnd.las.las+xml" '(lasxml) "IANA: Laser App Enterprise")
(addMimeType "LaTeX" "application/x-latex" '(latex) "Wikipedia: LaTeX")
(addMimeType "Life Balance - Desktop Edition" "application/vnd.llamagraphics.life-balance.desktop" '(lbd) "IANA: Life Balance")
(addMimeType "Life Balance - Exchange Format" "application/vnd.llamagraphics.life-balance.exchange+xml" '(lbe) "IANA: Life Balance")
(addMimeType "Lightspeed Audio Lab" "application/vnd.jam" '(jam) "IANA: Lightspeed Audio Lab")
(addMimeType "Lotus 1-2-3" "application/vnd.lotus-1-2-3" '(123) "IANA: Lotus 1-2-3")
(addMimeType "Lotus Approach" "application/vnd.lotus-approach" '(apr) "IANA: Lotus Approach")
(addMimeType "Lotus Freelance" "application/vnd.lotus-freelance" '(pre) "IANA: Lotus Freelance")
(addMimeType "Lotus Notes" "application/vnd.lotus-notes" '(nsf) "IANA: Lotus Notes")
(addMimeType "Lotus Organizer" "application/vnd.lotus-organizer" '(org) "IANA: Lotus Organizer")
(addMimeType "Lotus Screencam" "application/vnd.lotus-screencam" '(scm) "IANA: Lotus Screencam")
(addMimeType "Lotus Wordpro" "application/vnd.lotus-wordpro" '(lwp) "IANA: Lotus Wordpro")
(addMimeType "Lucent Voice" "audio/vnd.lucent.voice" '(lvp) "IANA: Lucent Voice")
(addMimeType "M3U (Multimedia Playlist)" "audio/x-mpegurl" '(m3u) "Wikipedia: M3U")
(addMimeType "M4v" "video/x-m4v" '(m4v) "Wikipedia: M4v")
(addMimeType "Macintosh BinHex 4.0" "application/mac-binhex40" '(hqx) "MacMIME")
(addMimeType "MacPorts Port System" "application/vnd.macports.portpkg" '(portpkg) "IANA: MacPorts Port System")
(addMimeType "MapGuide DBXML" "application/vnd.osgeo.mapguide.package" '(mgp) "IANA: MapGuide DBXML")
(addMimeType "MARC Formats" "application/marc" '(mrc) "RFC 2220")
(addMimeType "MARC21 XML Schema" "application/marcxml+xml" '(mrcx) "RFC 6207")
(addMimeType "Material Exchange Format" "application/mxf" '(mxf) "RFC 4539")
(addMimeType "Mathematica Notebook Player" "application/vnd.wolfram.player" '(nbp) "IANA: Mathematica Notebook Player")
(addMimeType "Mathematica Notebooks" "application/mathematica" '(ma) "IANA - Mathematica")
(addMimeType "Mathematical Markup Language" "application/mathml+xml" '(mathml) "W3C Math Home")
(addMimeType "Mbox database files" "application/mbox" '(mbox) "RFC 4155")
(addMimeType "MedCalc" "application/vnd.medcalcdata" '(mc1) "IANA: MedCalc")
(addMimeType "Media Server Control Markup Language" "application/mediaservercontrol+xml" '(mscml) "RFC 5022")
(addMimeType "MediaRemote" "application/vnd.mediastation.cdkey" '(cdkey) "IANA: MediaRemote")
(addMimeType "Medical Waveform Encoding Format" "application/vnd.mfer" '(mwf) "IANA: Medical Waveform Encoding Format")
(addMimeType "Melody Format for Mobile Platform" "application/vnd.mfmp" '(mfm) "IANA: Melody Format for Mobile Platform")
(addMimeType "Mesh Data Type" "model/mesh" '(msh) "RFC 2077")
(addMimeType "Metadata Authority Description Schema" "application/mads+xml" '(mads) "RFC 6207")
(addMimeType "Metadata Encoding and Transmission Standard" "application/mets+xml" '(mets) "RFC 6207")
(addMimeType "Metadata Object Description Schema" "application/mods+xml" '(mods) "RFC 6207")
(addMimeType "Metalink" "application/metalink4+xml" '(meta4) "Wikipedia: Metalink")
(addMimeType "Micro CADAM Helix D&D" "application/vnd.mcd" '(mcd) "IANA: Micro CADAM Helix D&D")
(addMimeType "Micrografx" "application/vnd.micrografx.flo" '(flo) "IANA: Micrografx")
(addMimeType "Micrografx iGrafx Professional" "application/vnd.micrografx.igx" '(igx) "IANA: Micrografx")
(addMimeType "MICROSEC e-Szign?" "application/vnd.eszigno3+xml" '(es3) "IANA: MICROSEC e-Szign?")
(addMimeType "Microsoft Access" "application/x-msaccess" '(mdb) "Wikipedia: Microsoft Access")
(addMimeType "Microsoft Advanced Systems Format (ASF)" "video/x-ms-asf" '(asf) "Wikipedia: Advanced Systems Format (ASF)")
(addMimeType "Microsoft Application" "application/x-msdownload" '(exe) "Wikipedia: EXE")
(addMimeType "Microsoft Artgalry" "application/vnd.ms-artgalry" '(cil) "IANA: MS Artgalry")
(addMimeType "Microsoft Cabinet File" "application/vnd.ms-cab-compressed" '(cab) "IANA: MS Cabinet File")
(addMimeType "Microsoft Class Server" "application/vnd.ms-ims" '(ims) "IANA: MS Class Server")
(addMimeType "Microsoft ClickOnce" "application/x-ms-application" '(application) "Wikipedia: ClickOnce")
(addMimeType "Microsoft Clipboard Clip" "application/x-msclip" '(clp) "Wikipedia: Clipboard")
(addMimeType "Microsoft Document Imaging Format" "image/vnd.ms-modi" '(mdi) "Wikipedia: Microsoft Document Image Format")
(addMimeType "Microsoft Embedded OpenType" "application/vnd.ms-fontobject" '(eot) "IANA: MS Embedded OpenType")
(addMimeType "Microsoft Excel" "application/vnd.ms-excel" '(xls) "IANA: MS Excel")
(addMimeType "Microsoft Excel - Add-In File" "application/vnd.ms-excel.addin.macroenabled.12" '(xlam) "IANA: MS Excel")
(addMimeType "Microsoft Excel - Binary Workbook" "application/vnd.ms-excel.sheet.binary.macroenabled.12" '(xlsb) "IANA: MS Excel")
(addMimeType "Microsoft Excel - Macro-Enabled Template File" "application/vnd.ms-excel.template.macroenabled.12" '(xltm) "IANA: MS Excel")
(addMimeType "Microsoft Excel - Macro-Enabled Workbook" "application/vnd.ms-excel.sheet.macroenabled.12" '(xlsm) "IANA: MS Excel")
(addMimeType "Microsoft Html Help File" "application/vnd.ms-htmlhelp" '(chm) "IANA:MS Html Help File")
(addMimeType "Microsoft Information Card" "application/x-mscardfile" '(crd) "Wikipedia: Information Card")
(addMimeType "Microsoft Learning Resource Module" "application/vnd.ms-lrm" '(lrm) "IANA: MS Learning Resource Module")
(addMimeType "Microsoft MediaView" "application/x-msmediaview" '(mvb) "Windows Help")
(addMimeType "Microsoft Money" "application/x-msmoney" '(mny) "Wikipedia: Microsoft Money")
(addMimeType "Microsoft Office - OOXML - Presentation" "application/vnd.openxmlformats-officedocument.presentationml.presentation" '(pptx) "IANA: OOXML - Presentation")
(addMimeType "Microsoft Office - OOXML - Presentation (Slide)" "application/vnd.openxmlformats-officedocument.presentationml.slide" '(sldx) "IANA: OOXML - Presentation")
(addMimeType "Microsoft Office - OOXML - Presentation (Slideshow)" "application/vnd.openxmlformats-officedocument.presentationml.slideshow" '(ppsx) "IANA: OOXML - Presentation")
(addMimeType "Microsoft Office - OOXML - Presentation Template" "application/vnd.openxmlformats-officedocument.presentationml.template" '(potx) "IANA: OOXML - Presentation Template")
(addMimeType "Microsoft Office - OOXML - Spreadsheet" "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" '(xlsx) "IANA: OOXML - Spreadsheet")
(addMimeType "Microsoft Office - OOXML - Spreadsheet Template" "application/vnd.openxmlformats-officedocument.spreadsheetml.template" '(xltx) "IANA: OOXML - Spreadsheet Template")
(addMimeType "Microsoft Office - OOXML - Word Document" "application/vnd.openxmlformats-officedocument.wordprocessingml.document" '(docx) "IANA: OOXML - Word Document")
(addMimeType "Microsoft Office - OOXML - Word Document Template" "application/vnd.openxmlformats-officedocument.wordprocessingml.template" '(dotx) "IANA: OOXML - Word Document Template")
(addMimeType "Microsoft Office Binder" "application/x-msbinder" '(obd) "Wikipedia: Microsoft Shared Tools")
(addMimeType "Microsoft Office System Release Theme" "application/vnd.ms-officetheme" '(thmx) "IANA: MS Office System Release Theme")
(addMimeType "Microsoft OneNote" "application/onenote" '(onetoc) "MS OneNote 2010")
(addMimeType "Microsoft PlayReady Ecosystem" "audio/vnd.ms-playready.media.pya" '(pya) "IANA: Microsoft PlayReady Ecosystem")
(addMimeType "Microsoft PlayReady Ecosystem Video" "video/vnd.ms-playready.media.pyv" '(pyv) "IANA: Microsoft PlayReady Ecosystem")
(addMimeType "Microsoft PowerPoint" "application/vnd.ms-powerpoint" '(ppt) "IANA: MS PowerPoint")
(addMimeType "Microsoft PowerPoint - Add-in file" "application/vnd.ms-powerpoint.addin.macroenabled.12" '(ppam) "IANA: MS PowerPoint")
(addMimeType "Microsoft PowerPoint - Macro-Enabled Open XML Slide" "application/vnd.ms-powerpoint.slide.macroenabled.12" '(sldm) "IANA: MS PowerPoint")
(addMimeType "Microsoft PowerPoint - Macro-Enabled Presentation File" "application/vnd.ms-powerpoint.presentation.macroenabled.12" '(pptm) "IANA: MS PowerPoint")
(addMimeType "Microsoft PowerPoint - Macro-Enabled Slide Show File" "application/vnd.ms-powerpoint.slideshow.macroenabled.12" '(ppsm) "IANA: MS PowerPoint")
(addMimeType "Microsoft PowerPoint - Macro-Enabled Template File" "application/vnd.ms-powerpoint.template.macroenabled.12" '(potm) "IANA: MS PowerPoint")
(addMimeType "Microsoft Project" "application/vnd.ms-project" '(mpp) "IANA: MS PowerPoint")
(addMimeType "Microsoft Publisher" "application/x-mspublisher" '(pub) "Wikipedia: Microsoft Publisher")
(addMimeType "Microsoft Schedule+" "application/x-msschedule" '(scd) "Wikipedia: Microsoft Schedule Plus")
(addMimeType "Microsoft Silverlight" "application/x-silverlight-app" '(xap) "Wikipedia: Silverlight")
(addMimeType "Microsoft Trust UI Provider - Certificate Trust Link" "application/vnd.ms-pki.stl" '(stl) "IANA: MS Trust UI Provider")
(addMimeType "Microsoft Trust UI Provider - Security Catalog" "application/vnd.ms-pki.seccat" '(cat) "IANA: MS Trust UI Provider")
(addMimeType "Microsoft Visio" "application/vnd.visio" '(vsd) "IANA: Visio")
(addMimeType "Microsoft Visio 2013" "application/vnd.visio2013" '(vsdx) "IANA: Visio")
(addMimeType "Microsoft Windows Media" "video/x-ms-wm" '(wm) "Wikipedia: Advanced Systems Format (ASF)")
(addMimeType "Microsoft Windows Media Audio" "audio/x-ms-wma" '(wma) "Wikipedia: Windows Media Audio")
(addMimeType "Microsoft Windows Media Audio Redirector" "audio/x-ms-wax" '(wax) "Windows Media Metafiles")
(addMimeType "Microsoft Windows Media Audio/Video Playlist" "video/x-ms-wmx" '(wmx) "Wikipedia: Advanced Systems Format (ASF)")
(addMimeType "Microsoft Windows Media Player Download Package" "application/x-ms-wmd" '(wmd) "Wikipedia: Windows Media Player")
(addMimeType "Microsoft Windows Media Player Playlist" "application/vnd.ms-wpl" '(wpl) "IANA: MS Windows Media Player Playlist")
(addMimeType "Microsoft Windows Media Player Skin Package" "application/x-ms-wmz" '(wmz) "Wikipedia: Windows Media Player")
(addMimeType "Microsoft Windows Media Video" "video/x-ms-wmv" '(wmv) "Wikipedia: Advanced Systems Format (ASF)")
(addMimeType "Microsoft Windows Media Video Playlist" "video/x-ms-wvx" '(wvx) "Wikipedia: Advanced Systems Format (ASF)")
(addMimeType "Microsoft Windows Metafile" "application/x-msmetafile" '(wmf) "Wikipedia: Windows Metafile")
(addMimeType "Microsoft Windows Terminal Services" "application/x-msterminal" '(trm) "Wikipedia: Terminal Server")
(addMimeType "Microsoft Word" "application/msword" '(doc) "Wikipedia: Microsoft Word")
(addMimeType "Microsoft Word - Macro-Enabled Document" "application/vnd.ms-word.document.macroenabled.12" '(docm) "IANA: MS Word")
(addMimeType "Microsoft Word - Macro-Enabled Template" "application/vnd.ms-word.template.macroenabled.12" '(dotm) "IANA: MS Word")
(addMimeType "Microsoft Wordpad" "application/x-mswrite" '(wri) "Wikipedia: Wordpad")
(addMimeType "Microsoft Works" "application/vnd.ms-works" '(wps) "IANA: MS Works")
(addMimeType "Microsoft XAML Browser Application" "application/x-ms-xbap" '(xbap) "Wikipedia: XAML Browser")
(addMimeType "Microsoft XML Paper Specification" "application/vnd.ms-xpsdocument" '(xps) "IANA: MS XML Paper Specification")
(addMimeType "MIDI" "audio/midi" '(midi) "Wikipedia: MIDI")
(addMimeType "MIDI - Musical Instrument Digital Interface" "audio/midi" '(mid) "Wikipedia: MIDI")
(addMimeType "MiniPay" "application/vnd.ibm.minipay" '(mpy) "IANA: MiniPay")
(addMimeType "MO:DCA-P" "application/vnd.ibm.modcap" '(afp) "IANA: MO:DCA-P")
(addMimeType "Mobile Information Device Profile" "application/vnd.jcp.javame.midlet-rms" '(rms) "IANA: Mobile Information Device Profile")
(addMimeType "MobileTV" "application/vnd.tmobile-livetv" '(tmo) "IANA: MobileTV")
(addMimeType "Mobipocket" "application/x-mobipocket-ebook" '(prc) "Wikipedia: Mobipocket")
(addMimeType "Mobius Management Systems - Basket file" "application/vnd.mobius.mbk" '(mbk) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - Distribution Database" "application/vnd.mobius.dis" '(dis) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - Policy Definition Language File" "application/vnd.mobius.plc" '(plc) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - Query File" "application/vnd.mobius.mqy" '(mqy) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - Script Language" "application/vnd.mobius.msl" '(msl) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - Topic Index File" "application/vnd.mobius.txf" '(txf) "IANA: Mobius Management Systems")
(addMimeType "Mobius Management Systems - UniversalArchive" "application/vnd.mobius.daf" '(daf) "IANA: Mobius Management Systems")
(addMimeType "mod_fly / fly.cgi" "text/vnd.fly" '(fly) "IANA: Fly")
(addMimeType "Mophun Certificate" "application/vnd.mophun.certificate" '(mpc) "IANA: Mophun Certificate")
(addMimeType "Mophun VM" "application/vnd.mophun.application" '(mpn) "IANA: Mophun VM")
(addMimeType "Motion JPEG 2000" "video/mj2" '(mj2) "IANA: MJ2")
(addMimeType "MPEG Audio" "audio/mpeg" '(mpga) "Wikipedia: MPGA")
(addMimeType "MPEG Transport Stream" "video/mp2t" '(ts) "Wikipedia: MPEG Transport Stream")
(addMimeType "MPEG Url" "video/vnd.mpegurl" '(mxu) "IANA: MPEG Url")
(addMimeType "MPEG Video" "video/mpeg" '(mpeg) "Wikipedia: MPEG")
(addMimeType "MPEG-21" "application/mp21" '(m21) "Wikipedia: MPEG-21")
(addMimeType "MPEG-4 Audio" "audio/mp4" '(mp4a) "Wikipedia: MP4A")
(addMimeType "MPEG-4 Video" "video/mp4" '(mp4) "Wikipedia: MP4")
(addMimeType "MPEG4" "application/mp4" '(mp4) "RFC 4337")
(addMimeType "Multimedia Playlist Unicode" "application/vnd.apple.mpegurl" '(m3u8) "Wikipedia: M3U")
(addMimeType "MUsical Score Interpreted Code Invented for the ASCII designation of Notation" "application/vnd.musician" '(mus) "IANA: MUSICIAN")
(addMimeType "Muvee Automatic Video Editing" "application/vnd.muvee.style" '(msty) "IANA: Muvee")
(addMimeType "MXML" "application/xv+xml" '(mxml) "Wikipedia: MXML")
(addMimeType "N-Gage Game Data" "application/vnd.nokia.n-gage.data" '(ngdat) "IANA: N-Gage Game Data")
(addMimeType "N-Gage Game Installer" "application/vnd.nokia.n-gage.symbian.install" '(n-gage) "IANA: N-Gage Game Installer")
(addMimeType "Navigation Control file for XML (for ePub)" "application/x-dtbncx+xml" '(ncx) "Wikipedia: EPUB")
(addMimeType "Network Common Data Form (NetCDF)" "application/x-netcdf" '(nc) "Wikipedia: NetCDF")
(addMimeType "neuroLanguage" "application/vnd.neurolanguage.nlu" '(nlu) "IANA: neuroLanguage")
(addMimeType "New Moon Liftoff/DNA" "application/vnd.dna" '(dna) "IANA: New Moon Liftoff/DNA")
(addMimeType "NobleNet Directory" "application/vnd.noblenet-directory" '(nnd) "IANA: NobleNet Directory")
(addMimeType "NobleNet Sealer" "application/vnd.noblenet-sealer" '(nns) "IANA: NobleNet Sealer")
(addMimeType "NobleNet Web" "application/vnd.noblenet-web" '(nnw) "IANA: NobleNet Web")
(addMimeType "Nokia Radio Application - Preset" "application/vnd.nokia.radio-preset" '(rpst) "IANA: Nokia Radio Application")
(addMimeType "Nokia Radio Application - Preset" "application/vnd.nokia.radio-presets" '(rpss) "IANA: Nokia Radio Application")
(addMimeType "Notation3" "text/n3" '(n3) "Wikipedia: Notation3")
(addMimeType "Novadigm's RADIA and EDM products" "application/vnd.novadigm.edm" '(edm) "IANA: Novadigm's RADIA and EDM products")
(addMimeType "Novadigm's RADIA and EDM products" "application/vnd.novadigm.edx" '(edx) "IANA: Novadigm's RADIA and EDM products")
(addMimeType "Novadigm's RADIA and EDM products" "application/vnd.novadigm.ext" '(ext) "IANA: Novadigm's RADIA and EDM products")
(addMimeType "NpGraphIt" "application/vnd.flographit" '(gph) "IANA: FloGraphIt")
(addMimeType "Nuera ECELP 4800" "audio/vnd.nuera.ecelp4800" '(ecelp4800) "IANA: ECELP 4800")
(addMimeType "Nuera ECELP 7470" "audio/vnd.nuera.ecelp7470" '(ecelp7470) "IANA: ECELP 7470")
(addMimeType "Nuera ECELP 9600" "audio/vnd.nuera.ecelp9600" '(ecelp9600) "IANA: ECELP 9600")
(addMimeType "Office Document Architecture" "application/oda" '(oda) "RFC 2161")
(addMimeType "Ogg" "application/ogg" '(ogx) "Wikipedia: Ogg")
(addMimeType "Ogg Audio" "audio/ogg" '(oga) "Wikipedia: Ogg")
(addMimeType "Ogg Video" "video/ogg" '(ogv) "Wikipedia: Ogg")
(addMimeType "OMA Download Agents" "application/vnd.oma.dd2+xml" '(dd2) "IANA: OMA Download Agents")
(addMimeType "Open Document Text Web" "application/vnd.oasis.opendocument.text-web" '(oth) "IANA: OpenDocument Text Web")
(addMimeType "Open eBook Publication Structure" "application/oebps-package+xml" '(opf) "Wikipedia: Open eBook")
(addMimeType "Open Financial Exchange" "application/vnd.intu.qbo" '(qbo) "IANA: Open Financial Exchange")
(addMimeType "Open Office Extension" "application/vnd.openofficeorg.extension" '(oxt) "IANA: Open Office Extension")
(addMimeType "Open Score Format" "application/vnd.yamaha.openscoreformat" '(osf) "IANA: Open Score Format")
(addMimeType "Open Web Media Project - Audio" "audio/webm" '(weba) "WebM Project")
(addMimeType "Open Web Media Project - Video" "video/webm" '(webm) "WebM Project")
(addMimeType "OpenDocument Chart" "application/vnd.oasis.opendocument.chart" '(odc) "IANA: OpenDocument Chart")
(addMimeType "OpenDocument Chart Template" "application/vnd.oasis.opendocument.chart-template" '(otc) "IANA: OpenDocument Chart Template")
(addMimeType "OpenDocument Database" "application/vnd.oasis.opendocument.database" '(odb) "IANA: OpenDocument Database")
(addMimeType "OpenDocument Formula" "application/vnd.oasis.opendocument.formula" '(odf) "IANA: OpenDocument Formula")
(addMimeType "OpenDocument Formula Template" "application/vnd.oasis.opendocument.formula-template" '(odft) "IANA: OpenDocument Formula Template")
(addMimeType "OpenDocument Graphics" "application/vnd.oasis.opendocument.graphics" '(odg) "IANA: OpenDocument Graphics")
(addMimeType "OpenDocument Graphics Template" "application/vnd.oasis.opendocument.graphics-template" '(otg) "IANA: OpenDocument Graphics Template")
(addMimeType "OpenDocument Image" "application/vnd.oasis.opendocument.image" '(odi) "IANA: OpenDocument Image")
(addMimeType "OpenDocument Image Template" "application/vnd.oasis.opendocument.image-template" '(oti) "IANA: OpenDocument Image Template")
(addMimeType "OpenDocument Presentation" "application/vnd.oasis.opendocument.presentation" '(odp) "IANA: OpenDocument Presentation")
(addMimeType "OpenDocument Presentation Template" "application/vnd.oasis.opendocument.presentation-template" '(otp) "IANA: OpenDocument Presentation Template")
(addMimeType "OpenDocument Spreadsheet" "application/vnd.oasis.opendocument.spreadsheet" '(ods) "IANA: OpenDocument Spreadsheet")
(addMimeType "OpenDocument Spreadsheet Template" "application/vnd.oasis.opendocument.spreadsheet-template" '(ots) "IANA: OpenDocument Spreadsheet Template")
(addMimeType "OpenDocument Text" "application/vnd.oasis.opendocument.text" '(odt) "IANA: OpenDocument Text")
(addMimeType "OpenDocument Text Master" "application/vnd.oasis.opendocument.text-master" '(odm) "IANA: OpenDocument Text Master")
(addMimeType "OpenDocument Text Template" "application/vnd.oasis.opendocument.text-template" '(ott) "IANA: OpenDocument Text Template")
(addMimeType "OpenGL Textures (KTX)" "image/ktx" '(ktx) "KTX File Format")
(addMimeType "OpenOffice - Calc (Spreadsheet)" "application/vnd.sun.xml.calc" '(sxc) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Calc Template (Spreadsheet)" "application/vnd.sun.xml.calc.template" '(stc) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Draw (Graphics)" "application/vnd.sun.xml.draw" '(sxd) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Draw Template (Graphics)" "application/vnd.sun.xml.draw.template" '(std) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Impress (Presentation)" "application/vnd.sun.xml.impress" '(sxi) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Impress Template (Presentation)" "application/vnd.sun.xml.impress.template" '(sti) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Math (Formula)" "application/vnd.sun.xml.math" '(sxm) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Writer (Text - HTML)" "application/vnd.sun.xml.writer" '(sxw) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Writer (Text - HTML)" "application/vnd.sun.xml.writer.global" '(sxg) "Wikipedia: OpenOffice")
(addMimeType "OpenOffice - Writer Template (Text - HTML)" "application/vnd.sun.xml.writer.template" '(stw) "Wikipedia: OpenOffice")
(addMimeType "OpenType Font File" "application/x-font-otf" '(otf) "OpenType Font File")
(addMimeType "Opus Audio" "audio/opus" '(opus) "Wikipedia: Opus Audio")
(addMimeType "OSFPVG" "application/vnd.yamaha.openscoreformat.osfpvg+xml" '(osfpvg) "IANA: OSFPVG")
(addMimeType "OSGi Deployment Package" "application/vnd.osgi.dp" '(dp) "IANA: OSGi Deployment Package")
(addMimeType "PalmOS Data" "application/vnd.palm" '(pdb) "IANA: PalmOS Data")
(addMimeType "Pascal Source File" "text/x-pascal" '(p) "Wikipedia: Pascal")
(addMimeType "PawaaFILE" "application/vnd.pawaafile" '(paw) "IANA: PawaaFILE")
(addMimeType "PCL 6 Enhanced (Formely PCL XL)" "application/vnd.hp-pclxl" '(pclxl) "IANA: HP PCL XL")
(addMimeType "Pcsel eFIF File" "application/vnd.picsel" '(efif) "IANA: Picsel eFIF File")
(addMimeType "PCX Image" "image/x-pcx" '(pcx) "Wikipedia: PCX")
(addMimeType "Photoshop Document" "image/vnd.adobe.photoshop" '(psd) "Wikipedia: Photoshop Document")
(addMimeType "PICSRules" "application/pics-rules" '(prf) "W3C PICSRules")
(addMimeType "PICT Image" "image/x-pict" '(pic) "Wikipedia: PICT")
(addMimeType "pIRCh" "application/x-chat" '(chat) "Wikipedia: pIRCh")
(addMimeType "PKCS #10 - Certification Request Standard" "application/pkcs10" '(p10) "RFC 2986")
(addMimeType "PKCS #12 - Personal Information Exchange Syntax Standard" "application/x-pkcs12" '(p12) "RFC 2986")
(addMimeType "PKCS #7 - Cryptographic Message Syntax Standard" "application/pkcs7-mime" '(p7m) "RFC 2315")
(addMimeType "PKCS #7 - Cryptographic Message Syntax Standard" "application/pkcs7-signature" '(p7s) "RFC 2315")
(addMimeType "PKCS #7 - Cryptographic Message Syntax Standard (Certificate Request Response)" "application/x-pkcs7-certreqresp" '(p7r) "RFC 2986")
(addMimeType "PKCS #7 - Cryptographic Message Syntax Standard (Certificates)" "application/x-pkcs7-certificates" '(p7b) "RFC 2986")
(addMimeType "PKCS #8 - Private-Key Information Syntax Standard" "application/pkcs8" '(p8) "RFC 5208")
(addMimeType "PocketLearn Viewers" "application/vnd.pocketlearn" '(plf) "IANA: PocketLearn Viewers")
(addMimeType "Portable Anymap Image" "image/x-portable-anymap" '(pnm) "Wikipedia: Netpbm Format")
(addMimeType "Portable Bitmap Format" "image/x-portable-bitmap" '(pbm) "Wikipedia: Netpbm Format")
(addMimeType "Portable Compiled Format" "application/x-font-pcf" '(pcf) "Wikipedia: Portable Compiled Format")
(addMimeType "Portable Font Resource" "application/font-tdpfr" '(pfr) "RFC 3073")
(addMimeType "Portable Game Notation (Chess Games)" "application/x-chess-pgn" '(pgn) "Wikipedia: Portable Game Notationb")
(addMimeType "Portable Graymap Format" "image/x-portable-graymap" '(pgm) "Wikipedia: Netpbm Format")
(addMimeType "Portable Network Graphics (PNG)" "image/png" '(png) "RFC 2083")
(addMimeType "Portable Network Graphics (PNG) (Citrix client)" "image/x-citrix-png" '(png) "RFC 2083")
(addMimeType "Portable Network Graphics (PNG) (x-token)" "image/x-png" '(png) "RFC 2083")
(addMimeType "Portable Pixmap Format" "image/x-portable-pixmap" '(ppm) "Wikipedia: Netpbm Format")
(addMimeType "Portable Symmetric Key Container" "application/pskc+xml" '(pskcxml) "RFC 6030")
(addMimeType "PosML" "application/vnd.ctc-posml" '(pml) "IANA: PosML")
(addMimeType "PostScript" "application/postscript" '(ai) "Wikipedia: PostScript")
(addMimeType "PostScript Fonts" "application/x-font-type1" '(pfa) "Wikipedia: PostScript Fonts")
(addMimeType "PowerBuilder" "application/vnd.powerbuilder6" '(pbd) "IANA: PowerBuilder")
(addMimeType "Pretty Good Privacy" "application/pgp-encrypted" '(pgp) "RFC 2015")
(addMimeType "Pretty Good Privacy - Signature" "application/pgp-signature" '(pgp) "RFC 2015")
(addMimeType "Preview Systems ZipLock/VBox" "application/vnd.previewsystems.box" '(box) "IANA: Preview Systems ZipLock/Vbox")
(addMimeType "Princeton Video Image" "application/vnd.pvi.ptid1" '(ptid) "IANA: Princeton Video Image")
(addMimeType "Pronunciation Lexicon Specification" "application/pls+xml" '(pls) "RFC 4267")
(addMimeType "Proprietary P&G Standard Reporting System" "application/vnd.pg.format" '(str) "IANA: Proprietary P&G Standard Reporting System")
(addMimeType "Proprietary P&G Standard Reporting System" "application/vnd.pg.osasli" '(ei6) "IANA: Proprietary P&G Standard Reporting System")
(addMimeType "PRS Lines Tag" "text/prs.lines.tag" '(dsc) "IANA: PRS Lines Tag")
(addMimeType "PSF Fonts" "application/x-font-linux-psf" '(psf) "PSF Fonts")
(addMimeType "PubliShare Objects" "application/vnd.publishare-delta-tree" '(qps) "IANA: PubliShare Objects")
(addMimeType "Qualcomm's Plaza Mobile Internet" "application/vnd.pmi.widget" '(wg) "IANA: Qualcomm's Plaza Mobile Internet")
(addMimeType "QuarkXpress" "application/vnd.quark.quarkxpress" '(qxd) "IANA: QuarkXPress")
(addMimeType "QUASS Stream Player" "application/vnd.epson.esf" '(esf) "IANA: QUASS Stream Player")
(addMimeType "QUASS Stream Player" "application/vnd.epson.msf" '(msf) "IANA: QUASS Stream Player")
(addMimeType "QUASS Stream Player" "application/vnd.epson.ssf" '(ssf) "IANA: QUASS Stream Player")
(addMimeType "QuickAnime Player" "application/vnd.epson.quickanime" '(qam) "IANA: QuickAnime Player")
(addMimeType "Quicken" "application/vnd.intu.qfx" '(qfx) "IANA: Quicken")
(addMimeType "Quicktime Video" "video/quicktime" '(qt) "Wikipedia: Quicktime")
(addMimeType "RAR Archive" "application/x-rar-compressed" '(rar) "Wikipedia: RAR")
(addMimeType "Real Audio Sound" "audio/x-pn-realaudio" '(ram) "Wikipedia: RealPlayer")
(addMimeType "Real Audio Sound" "audio/x-pn-realaudio-plugin" '(rmp) "Wikipedia: RealPlayer")
(addMimeType "Really Simple Discovery" "application/rsd+xml" '(rsd) "Wikipedia: Really Simple Discovery")
(addMimeType "RealMedia" "application/vnd.rn-realmedia" '(rm) "")
(addMimeType "RealVNC" "application/vnd.realvnc.bed" '(bed) "IANA: RealVNC")
(addMimeType "Recordare Applications" "application/vnd.recordare.musicxml" '(mxl) "IANA: Recordare Apps")
(addMimeType "Recordare Applications" "application/vnd.recordare.musicxml+xml" '(musicxml) "IANA: Recordare Apps")
(addMimeType "Relax NG Compact Syntax" "application/relax-ng-compact-syntax" '(rnc) "Relax NG")
(addMimeType "RemoteDocs R-Viewer" "application/vnd.data-vision.rdz" '(rdz) "IANA: Data-Vision")
(addMimeType "Resource Description Framework" "application/rdf+xml" '(rdf) "RFC 3870")
(addMimeType "RetroPlatform Player" "application/vnd.cloanto.rp9" '(rp9) "IANA: RetroPlatform Player")
(addMimeType "RhymBox" "application/vnd.jisp" '(jisp) "IANA: RhymBox")
(addMimeType "Rich Text Format" "application/rtf" '(rtf) "Wikipedia: Rich Text Format")
(addMimeType "Rich Text Format (RTF)" "text/richtext" '(rtx) "Wikipedia: Rich Text Format")
(addMimeType "ROUTE 66 Location Based Services" "application/vnd.route66.link66+xml" '(link66) "IANA: ROUTE 66")
(addMimeType "RSS - Really Simple Syndication" "application/rss+xml" '(rss xml) "Wikipedia: RSS")
(addMimeType "S Hexdump Format" "application/shf+xml" '(shf) "RFC 4194")
(addMimeType "SailingTracker" "application/vnd.sailingtracker.track" '(st) "IANA: SailingTracker")
(addMimeType "Scalable Vector Graphics (SVG)" "image/svg+xml" '(svg) "Wikipedia: SVG")
(addMimeType "ScheduleUs" "application/vnd.sus-calendar" '(sus) "IANA: ScheduleUs")
(addMimeType "Search/Retrieve via URL Response Format" "application/sru+xml" '(sru) "RFC 6207")
(addMimeType "Secure Electronic Transaction - Payment" "application/set-payment-initiation" '(setpay) "IANA: SET Payment")
(addMimeType "Secure Electronic Transaction - Registration" "application/set-registration-initiation" '(setreg) "IANA: SET Registration")
(addMimeType "Secured eMail" "application/vnd.sema" '(sema) "IANA: Secured eMail")
(addMimeType "Secured eMail" "application/vnd.semd" '(semd) "IANA: Secured eMail")
(addMimeType "Secured eMail" "application/vnd.semf" '(semf) "IANA: Secured eMail")
(addMimeType "SeeMail" "application/vnd.seemail" '(see) "IANA: SeeMail")
(addMimeType "Server Normal Format" "application/x-font-snf" '(snf) "Wikipedia: Server Normal Format")
(addMimeType "Server-Based Certificate Validation Protocol - Validation Policies - Request" "application/scvp-vp-request" '(spq) "RFC 5055")
(addMimeType "Server-Based Certificate Validation Protocol - Validation Policies - Response" "application/scvp-vp-response" '(spp) "RFC 5055")
(addMimeType "Server-Based Certificate Validation Protocol - Validation Request" "application/scvp-cv-request" '(scq) "RFC 5055")
(addMimeType "Server-Based Certificate Validation Protocol - Validation Response" "application/scvp-cv-response" '(scs) "RFC 5055")
(addMimeType "Session Description Protocol" "application/sdp" '(sdp) "RFC 2327")
(addMimeType "Setext" "text/x-setext" '(etx) "Wikipedia: Setext")
(addMimeType "SGI Movie" "video/x-sgi-movie" '(movie) "SGI Facts")
(addMimeType "Shana Informed Filler" "application/vnd.shana.informed.formdata" '(ifm) "IANA: Shana Informed Filler")
(addMimeType "Shana Informed Filler" "application/vnd.shana.informed.formtemplate" '(itp) "IANA: Shana Informed Filler")
(addMimeType "Shana Informed Filler" "application/vnd.shana.informed.interchange" '(iif) "IANA: Shana Informed Filler")
(addMimeType "Shana Informed Filler" "application/vnd.shana.informed.package" '(ipk) "IANA: Shana Informed Filler")
(addMimeType "Sharing Transaction Fraud Data" "application/thraud+xml" '(tfi) "RFC 5941")
(addMimeType "Shell Archive" "application/x-shar" '(shar) "Wikipedia: Shell Archie")
(addMimeType "Silicon Graphics RGB Bitmap" "image/x-rgb" '(rgb) "RGB Image Format")
(addMimeType "SimpleAnimeLite Player" "application/vnd.epson.salt" '(slt) "IANA: SimpleAnimeLite Player")
(addMimeType "Simply Accounting" "application/vnd.accpac.simply.aso" '(aso) "IANA: Simply Accounting")
(addMimeType "Simply Accounting - Data Import" "application/vnd.accpac.simply.imp" '(imp) "IANA: Simply Accounting")
(addMimeType "SimTech MindMapper" "application/vnd.simtech-mindmapper" '(twd) "IANA: SimTech MindMapper")
(addMimeType "Sixth Floor Media - CommonSpace" "application/vnd.commonspace" '(csp) "IANA: CommonSpace")
(addMimeType "SMAF Audio" "application/vnd.yamaha.smaf-audio" '(saf) "IANA: SMAF Audio")
(addMimeType "SMAF File" "application/vnd.smaf" '(mmf) "IANA: SMAF File")
(addMimeType "SMAF Phrase" "application/vnd.yamaha.smaf-phrase" '(spf) "IANA: SMAF Phrase")
(addMimeType "SMART Technologies Apps" "application/vnd.smart.teacher" '(teacher) "IANA: SMART Technologies Apps")
(addMimeType "SourceView Document" "application/vnd.svd" '(svd) "IANA: SourceView Document")
(addMimeType "SPARQL - Query" "application/sparql-query" '(rq) "W3C SPARQL")
(addMimeType "SPARQL - Results" "application/sparql-results+xml" '(srx) "W3C SPARQL")
(addMimeType "Speech Recognition Grammar Specification" "application/srgs" '(gram) "W3C Speech Grammar")
(addMimeType "Speech Recognition Grammar Specification - XML" "application/srgs+xml" '(grxml) "W3C Speech Grammar")
(addMimeType "Speech Synthesis Markup Language" "application/ssml+xml" '(ssml) "W3C Speech Synthesis")
(addMimeType "SSEYO Koan Play File" "application/vnd.koan" '(skp) "IANA: SSEYO Koan Play File")
(addMimeType "Standard Generalized Markup Language (SGML)" "text/sgml" '(sgml) "Wikipedia: SGML")
(addMimeType "StarOffice - Calc" "application/vnd.stardivision.calc" '(sdc) "")
(addMimeType "StarOffice - Draw" "application/vnd.stardivision.draw" '(sda) "")
(addMimeType "StarOffice - Impress" "application/vnd.stardivision.impress" '(sdd) "")
(addMimeType "StarOffice - Math" "application/vnd.stardivision.math" '(smf) "")
(addMimeType "StarOffice - Writer" "application/vnd.stardivision.writer" '(sdw) "")
(addMimeType "StarOffice - Writer (Global)" "application/vnd.stardivision.writer-global" '(sgl) "")
(addMimeType "StepMania" "application/vnd.stepmania.stepchart" '(sm) "IANA: StepMania")
(addMimeType "Stuffit Archive" "application/x-stuffit" '(sit) "Wikipedia: Stuffit")
(addMimeType "Stuffit Archive" "application/x-stuffitx" '(sitx) "Wikipedia: Stuffit")
(addMimeType "SudokuMagic" "application/vnd.solent.sdkm+xml" '(sdkm) "IANA: SudokuMagic")
(addMimeType "Sugar Linux Application Bundle" "application/vnd.olpc-sugar" '(xo) "IANA: Sugar Linux App Bundle")
(addMimeType "Sun Audio - Au file format" "audio/basic" '(au) "Wikipedia: Sun audio")
(addMimeType "SundaHus WQ" "application/vnd.wqd" '(wqd) "IANA: SundaHus WQ")
(addMimeType "Symbian Install Package" "application/vnd.symbian.install" '(sis) "IANA: Symbian Install")
(addMimeType "Synchronized Multimedia Integration Language" "application/smil+xml" '(smi) "RFC 4536")
(addMimeType "SyncML" "application/vnd.syncml+xml" '(xsm) "IANA: SyncML")
(addMimeType "SyncML - Device Management" "application/vnd.syncml.dm+wbxml" '(bdm) "IANA: SyncML")
(addMimeType "SyncML - Device Management" "application/vnd.syncml.dm+xml" '(xdm) "IANA: SyncML")
(addMimeType "System V Release 4 CPIO Archive" "application/x-sv4cpio" '(sv4cpio) "Wikipedia: pax")
(addMimeType "System V Release 4 CPIO Checksum Data" "application/x-sv4crc" '(sv4crc) "Wikipedia: pax")
(addMimeType "Systems Biology Markup Language" "application/sbml+xml" '(sbml) "RFC 3823")
(addMimeType "Tab Seperated Values" "text/tab-separated-values" '(tsv) "Wikipedia: TSV")
(addMimeType "Tagged Image File Format" "image/tiff" '(tiff) "Wikipedia: TIFF")
(addMimeType "Tao Intent" "application/vnd.tao.intent-module-archive" '(tao) "IANA: Tao Intent")
(addMimeType "Tar File (Tape Archive)" "application/x-tar" '(tar) "Wikipedia: Tar")
(addMimeType "Tcl Script" "application/x-tcl" '(tcl) "Wikipedia: Tcl")
(addMimeType "TeX" "application/x-tex" '(tex) "Wikipedia: TeX")
(addMimeType "TeX Font Metric" "application/x-tex-tfm" '(tfm) "Wikipedia: TeX Font Metric")
(addMimeType "Text Encoding and Interchange" "application/tei+xml" '(tei) "RFC 6129")
(addMimeType "Text File" "text/plain" '(txt) "Wikipedia: Text File")
(addMimeType "TIBCO Spotfire" "application/vnd.spotfire.dxp" '(dxp) "IANA: TIBCO Spotfire")
(addMimeType "TIBCO Spotfire" "application/vnd.spotfire.sfs" '(sfs) "IANA: TIBCO Spotfire")
(addMimeType "Time Stamped Data Envelope" "application/timestamped-data" '(tsd) "RFC 5955")
(addMimeType "TRI Systems Config" "application/vnd.trid.tpt" '(tpt) "IANA: TRI Systems")
(addMimeType "Triscape Map Explorer" "application/vnd.triscape.mxs" '(mxs) "IANA: Triscape Map Explorer")
(addMimeType "troff" "text/troff" '(t) "Wikipedia: troff")
(addMimeType "True BASIC" "application/vnd.trueapp" '(tra) "IANA: True BASIC")
(addMimeType "TrueType Font" "application/x-font-ttf" '(ttf) "Wikipedia: TrueType")
(addMimeType "Turtle (Terse RDF Triple Language)" "text/turtle" '(ttl) "Wikipedia: Turtle")
(addMimeType "UMAJIN" "application/vnd.umajin" '(umj) "IANA: UMAJIN")
(addMimeType "Unique Object Markup Language" "application/vnd.uoml+xml" '(uoml) "IANA: UOML")
(addMimeType "Unity 3d" "application/vnd.unity" '(unityweb) "IANA: Unity 3d")
(addMimeType "Universal Forms Description Language" "application/vnd.ufdl" '(ufd) "IANA: Universal Forms Description Language")
(addMimeType "URI Resolution Services" "text/uri-list" '(uri) "RFC 2483")
(addMimeType "User Interface Quartz - Theme (Symbian)" "application/vnd.uiq.theme" '(utz) "IANA: User Interface Quartz")
(addMimeType "Ustar (Uniform Standard Tape Archive)" "application/x-ustar" '(ustar) "Wikipedia: Ustar")
(addMimeType "UUEncode" "text/x-uuencode" '(uu) "Wikipedia: UUEncode")
(addMimeType "vCalendar" "text/x-vcalendar" '(vcs) "Wikipedia: vCalendar")
(addMimeType "vCard" "text/x-vcard" '(vcf) "Wikipedia: vCard")
(addMimeType "Video CD" "application/x-cdlink" '(vcd) "Wikipedia: Video CD")
(addMimeType "Viewport+" "application/vnd.vsf" '(vsf) "IANA: Viewport+")
(addMimeType "Virtual Reality Modeling Language" "model/vrml" '(wrl) "Wikipedia: VRML")
(addMimeType "VirtualCatalog" "application/vnd.vcx" '(vcx) "IANA: VirtualCatalog")
(addMimeType "Virtue MTS" "model/vnd.mts" '(mts) "IANA: MTS")
(addMimeType "Virtue VTU" "model/vnd.vtu" '(vtu) "IANA: VTU")
(addMimeType "Visionary" "application/vnd.visionary" '(vis) "IANA: Visionary")
(addMimeType "Vivo" "video/vnd.vivo" '(viv) "IANA: Vivo")
(addMimeType "Voice Browser Call Control" "application/ccxml+xml," '(ccxml) "Voice Browser Call Control: CCXML Version 1.0")
(addMimeType "VoiceXML" "application/voicexml+xml" '(vxml) "RFC 4267")
(addMimeType "WAIS Source" "application/x-wais-source" '(src) "YoLinux")
(addMimeType "WAP Binary XML (WBXML)" "application/vnd.wap.wbxml" '(wbxml) "IANA: WBXML")
(addMimeType "WAP Bitamp (WBMP)" "image/vnd.wap.wbmp" '(wbmp) "IANA: WBMP")
(addMimeType "Waveform Audio File Format (WAV)" "audio/x-wav" '(wav) "Wikipedia: WAV")
(addMimeType "Web Distributed Authoring and Versioning" "application/davmount+xml" '(davmount) "RFC 4918")
(addMimeType "Web Open Font Format" "application/x-font-woff" '(woff) "Wikipedia: Web Open Font Format")
(addMimeType "Web Services Policy" "application/wspolicy+xml" '(wspolicy) "W3C Web Services Policy")
(addMimeType "WebP Image" "image/webp" '(webp) "Wikipedia: WebP")
(addMimeType "WebTurbo" "application/vnd.webturbo" '(wtb) "IANA: WebTurbo")
(addMimeType "Widget Packaging and XML Configuration" "application/widget" '(wgt) "W3C Widget Packaging and XML Configuration")
(addMimeType "WinHelp" "application/winhlp" '(hlp) "Wikipedia: WinHelp")
(addMimeType "Wireless Markup Language (WML)" "text/vnd.wap.wml" '(wml) "Wikipedia: WML")
(addMimeType "Wireless Markup Language Script (WMLScript)" "text/vnd.wap.wmlscript" '(wmls) "Wikipedia: WMLScript")
(addMimeType "WMLScript" "application/vnd.wap.wmlscriptc" '(wmlsc) "IANA: WMLScript")
(addMimeType "Wordperfect" "application/vnd.wordperfect" '(wpd) "IANA: Wordperfect")
(addMimeType "Worldtalk" "application/vnd.wt.stf" '(stf) "IANA: Worldtalk")
(addMimeType "WSDL - Web Services Description Language" "application/wsdl+xml" '(wsdl) "W3C Web Service Description Language")
(addMimeType "X BitMap" "image/x-xbitmap" '(xbm) "Wikipedia: X BitMap")
(addMimeType "X PixMap" "image/x-xpixmap" '(xpm) "Wikipedia: X PixMap")
(addMimeType "X Window Dump" "image/x-xwindowdump" '(xwd) "Wikipedia: X Window Dump")
(addMimeType "X.509 Certificate" "application/x-x509-ca-cert" '(der) "Wikipedia: X.509")
(addMimeType "Xfig" "application/x-xfig" '(fig) "Wikipedia: Xfig")
(addMimeType "XHTML - The Extensible HyperText Markup Language" "application/xhtml+xml" '(xhtml) "W3C XHTML")
(addMimeType "XML - Extensible Markup Language" "application/xml" '(xml) "W3C XML")
(addMimeType "XML Configuration Access Protocol - XCAP Diff" "application/xcap-diff+xml" '(xdf) "Wikipedia: XCAP")
(addMimeType "XML Encryption Syntax and Processing" "application/xenc+xml" '(xenc) "W3C XML Encryption Syntax and Processing")
(addMimeType "XML Patch Framework" "application/patch-ops-error+xml" '(xer) "RFC 5261")
(addMimeType "XML Resource Lists" "application/resource-lists+xml" '(rl) "RFC 4826")
(addMimeType "XML Resource Lists" "application/rls-services+xml" '(rs) "RFC 4826")
(addMimeType "XML Resource Lists Diff" "application/resource-lists-diff+xml" '(rld) "RFC 4826")
(addMimeType "XML Transformations" "application/xslt+xml" '(xslt) "W3C XSLT")
(addMimeType "XML-Binary Optimized Packaging" "application/xop+xml" '(xop) "W3C XOP")
(addMimeType "XPInstall - Mozilla" "application/x-xpinstall" '(xpi) "Wikipedia: XPI")
(addMimeType "XSPF - XML Shareable Playlist Format" "application/xspf+xml" '(xspf) "XML Shareable Playlist Format")
(addMimeType "XUL - XML User Interface Language" "application/vnd.mozilla.xul+xml" '(xul) "IANA: XUL")
(addMimeType "XYZ File Format" "chemical/x-xyz" '(xyz) "Wikipedia: XYZ File Format")
(addMimeType "YAML Ain't Markup Language / Yet Another Markup Language" "text/yaml" '(yaml) "YAML: YAML Ain't Markup Language")
(addMimeType "YANG Data Modeling Language" "application/yang" '(yang) "Wikipedia: YANG")
(addMimeType "YIN (YANG - XML)" "application/yin+xml" '(yin) "Wikipedia: YANG")
(addMimeType "Z.U.L. Geometry" "application/vnd.zul" '(zir) "IANA: Z.U.L.")
(addMimeType "Zip Archive" "application/zip" '(zip) "Wikipedia: Zip")
(addMimeType "ZVUE Media Manager" "application/vnd.handheld-entertainment+xml" '(zmm) "IANA: ZVUE Media Manager")
(addMimeType "Zzazz Deck" "application/vnd.zzazz.deck+xml" '(zaz) "IANA: Zzazz")

View File

@@ -24,6 +24,14 @@
rkt-webview-call-js
rkt-webview-move
rkt-webview-resize
rkt-webview-show
rkt-webview-hide
rkt-webview-show-normal
rkt-webview-maximize
rkt-webview-minimize
rkt-webview-window-state
rkt-webview-set-title!
rkt-webview-present
rkt-webview-exit
rkt-webview-valid?
rkt-webview-open-devtools
@@ -35,70 +43,95 @@
(define lib-type 'release)
(define-runtime-path lib-dir ".")
; (if (eq? (system-type 'os*) 'windows)
; "..\\lib"
; "../lib"))
(define os (system-type 'os*))
(define supported-os '(windows linux))
(define libname (let ((os (system-type 'os*)))
(cond ((eq? os 'windows) (format "rktwebview.dll"))
((eq? os 'linux) (format "librktwebview.so"))
(else (error (format "OS ~a not supported" os)))))
(unless (ormap (λ (o) (eq? os o)) supported-os)
(error (format "OS currently not supported: ~a. Supported: ~a." os supported-os)))
(define-runtime-path lib-dir "lib")
(define libraries-to-preload
(cond
([eq? os 'windows]
'(Qt6Core.dll
Qt6Positioning.dll
Qt6Gui.dll
Qt6Widgets.dll
Qt6Svg.dll
Qt6Network.dll
Qt6OpenGL.dll
Qt6PrintSupport.dll
Qt6Qml.dll
Qt6QmlModels.dll
Qt6QmlWorkerScript.dll
Qt6QmlMeta.dll
Qt6Quick.dll
Qt6QuickWidgets.dll
Qt6WebChannel.dll
Qt6WebEngineCore.dll
Qt6WebEngineWidgets.dll
))
([eq? os 'linux]
'())
)
)
;(set! libname "../rktwebview/build/Release/rktwebview.dll")
;(set! libname "../rktwebview/build/Release/librktwebview.so")
(if (eq? (system-type 'os*) 'windows)
(set! libname "..\\rktwebview_qt\\build\\Release\\rktwebview_qt.dll")
(set! libname "../rktwebview_qt/build/Release/librktwebview_qt.so"))
(set! libname "rktwebview_qt.dll")
(current-directory (build-path lib-dir "..\\rktwebview_qt\\build\\Release"))
(define ffi-library
(cond
([eq? os 'windows] 'rktwebview_qt.dll)
([eq? os 'linux] 'librktwebview_qt.so)
)
)
;(define webview-lib-file (normalize-path (build-path lib-dir libname)))
(define webview-lib-file libname)
(displayln (format "~a - ~a" (current-directory) webview-lib-file))
(define (libname lib-symbol)
(build-path lib-dir (symbol->string os) (symbol->string lib-symbol)))
; c:\qt\6.10.2\msvc2022_64\bin\windeployqt.exe rktwebview_qt_test.exe
(putenv "QT_PLUGIN_PATH" (path->string (current-directory)))
(putenv "QTWEBENGINEPROCESS_PATH"
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\QtWebEngineProcess.exe")
(putenv "QTWEBENGINE_RESOURCES_PATH"
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\resources")
(putenv "QTWEBENGINE_LOCALES_PATH"
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\translations\\qtwebengine_locales")
(when (eq? os 'windows)
(putenv "QT_PLUGIN_PATH"
(path->string (build-path lib-dir (symbol->string os))))
(putenv "QTWEBENGINEPROCESS_PATH"
(path->string (build-path lib-dir (symbol->string os) "QtWebEngineProcess.exe")))
(putenv "QTWEBENGINE_RESOURCES_PATH"
(path->string (build-path lib-dir (symbol->string os) "resources")))
(putenv "QTWEBENGINE_LOCALES_PATH"
(path->string (build-path lib-dir (symbol->string os) "translations" "qtwebengine_locales")))
)
(define libs '(Qt6Core.dll
Qt6Positioning.dll
;Qt6Concurrent.dll
Qt6Gui.dll
Qt6Widgets.dll
;qwindows.dll
Qt6Svg.dll
Qt6Network.dll
Qt6OpenGL.dll
;Qt6OpenGLWidgets.dll
Qt6PrintSupport.dll
Qt6Qml.dll
;Qt6Xml.dll
Qt6QmlModels.dll
Qt6QmlWorkerScript.dll
Qt6QmlMeta.dll
Qt6Quick.dll
Qt6QuickWidgets.dll
Qt6WebChannel.dll
Qt6WebEngineCore.dll
;Qt6WebEngineQuick.dll
Qt6WebEngineWidgets.dll
))
(for-each (λ (l)
(let ((lib (symbol->string l)))
(displayln (format "~a: ~a" lib (ffi-lib lib)))))
libs)
;;; Preload libraries
(for-each (λ (lib-symbol)
(let ((load-lib (libname lib-symbol)))
(ffi-lib load-lib)))
libraries-to-preload)
;;; Actual FFI integration
(define webview-lib-file (libname ffi-library))
(define webview-lib
(with-handlers ([exn:fail?
(λ (exp)
(cond
([eq? os 'linux]
(error (format
(string-append "Cannot load ~a.\n"
"Make sure you installed Qt6on your system\n"
"e.g. on debian 'sudo apt install libqt6webenginewidgets6'\n"
"\n"
"Exception:\n\n~a")
ffi-library exp)))
(else (error
(format "Cannot load ~a for os ~a\n\nException:\n\n~a"
ffi-library os exp))))
)
])
(ffi-lib webview-lib-file)))
(define webview-lib (ffi-lib webview-lib-file))
(define-ffi-definer define-rktwebview webview-lib)
;;; Callbacks from the OS library
(define callback-box (box '()))
(define (applier thunk)
(thunk))
@@ -117,7 +150,19 @@
no_delegate_for_context = 5
move_failed = 12
resize_failed = 13
)
)
)
(define _rkt_window_state_t
(_enum '(invalid = -1
normal = 0
minimized = 1
maximized = 2
hidden = 3
normal_active = 16
maximized_active = 18
)
)
)
@@ -170,7 +215,7 @@
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_open_devtools(int wv);
(define-rktwebview rkt_webview_open_devtools
(_fun _int -> _int))
(_fun _int -> _rkt_result_t))
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_destroy_event(rkt_event_t e);
(define-rktwebview rkt_webview_destroy_event
@@ -184,10 +229,41 @@
(define-rktwebview rkt_webview_resize
(_fun _int _int _int -> _rkt_result_t))
(define-syntax def-rkt-wv
(syntax-rules ()
((_ name)
(define-rktwebview name
(_fun _int -> _rkt_result_t)))))
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_hide(rktwebview_t w);
(def-rkt-wv rkt_webview_hide)
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show(rktwebview_t w);
(def-rkt-wv rkt_webview_show)
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show_normal(rktwebview_t w);
(def-rkt-wv rkt_webview_show_normal)
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_present(rktwebview_t w);
(def-rkt-wv rkt_webview_present)
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_maximize(rktwebview_t w);
(def-rkt-wv rkt_webview_maximize)
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_minimize(rktwebview_t w);
(def-rkt-wv rkt_webview_minimize)
;RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv);
(define-rktwebview rkt_webview_valid
(_fun _int -> _int))
;RKTWEBVIEW_QT_EXPORT window_state_t rkt_webview_window_state(rktwebview_t w);
(define-rktwebview rkt_webview_window_state
(_fun _int -> _rkt_window_state_t))
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title);
(define-rktwebview rkt_webview_set_title
(_fun _int _string/utf-8 -> _rkt_result_t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Initialize and start library
@@ -274,11 +350,14 @@
(define (rkt-webview-set-html! wv html)
(rkt_webview_set_html (rkt-wv-win wv) html))
(define (rkt-webview-set-title! wv title)
(rkt_webview_set_title (rkt-wv-win wv) title))
(define (rkt-webview-run-js wv js)
(rkt_webview_run_js (rkt-wv-win wv) js))
(define (rkt-webview-call-js wv js)
(let* ((r (rkt_webview_call_js (rkt-wv-win) js))
(let* ((r (rkt_webview_call_js (rkt-wv-win wv) js))
(value (cast (rkt_js_result_t-value r) _pointer _string*/utf-8))
(result (rkt_js_result_t-result r)))
(rkt_webview_destroy_js_result r)
@@ -290,6 +369,20 @@
(define (rkt-webview-move wv x y)
(rkt_webview_move (rkt-wv-win wv) x y))
(define-syntax def-rkt-wrapper-wv
(syntax-rules ()
((_ name c-name)
(define (name wv)
(c-name (rkt-wv-win wv))))))
(def-rkt-wrapper-wv rkt-webview-show rkt_webview_show)
(def-rkt-wrapper-wv rkt-webview-hide rkt_webview_hide)
(def-rkt-wrapper-wv rkt-webview-show-normal rkt_webview_show_normal)
(def-rkt-wrapper-wv rkt-webview-minimize rkt_webview_minimize)
(def-rkt-wrapper-wv rkt-webview-maximize rkt_webview_maximize)
(def-rkt-wrapper-wv rkt-webview-present rkt_webview_present)
(def-rkt-wrapper-wv rkt-webview-window-state rkt_webview_window_state)
(define (rkt-webview-open-devtools wv)
(rkt_webview_open_devtools (rkt-wv-win wv)))
@@ -309,5 +402,10 @@
open-windows))
(stop-event-processing))
(plumber-add-flush! (current-plumber)
(λ (handle)
(rkt-webview-exit)))

View File

@@ -2,6 +2,7 @@
(require "racket-webview-qt.rkt"
"utils.rkt"
"mimetypes.rkt"
web-server/servlet
web-server/servlet-env
web-server/http
@@ -11,6 +12,9 @@
racket/string
racket/path
racket/port
racket/contract
xml
xml/xexpr
json
)
@@ -19,11 +23,32 @@
webview-close
webview-run-js
webview-call-js
webview-call-js-result?
webview-move
webview-resize
webview-show
webview-hide
webview-show-normal
webview-maximize
webview-minimize
webview-window-state
webview-bind!
webview-standard-file-getter
webview-set-title!
webview-set-url!
webview-set-html!
webview-set-innerHTML!
webview-set-value!
webview-value
webview-value/bool
webview-value/symbol
webview-value/number
webview-add-class!
webview-remove-class!
webview-set-style!
webview-standard-file-getter
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -45,7 +70,8 @@
[window-nr #:mutable]
[file-getter #:mutable]
[boilerplate-js #:mutable]
[webserver-thread #:mutable]))
[webserver-thread #:mutable])
#:transparent)
(define (process-html wv-handle path out)
(let ((html (file->string path))
@@ -59,7 +85,7 @@
(define (process-file wv-handle ext path out)
(let ((content (file->bytes path)))
(write bytes out)))
(display content out)))
(define (web-serve wv-handle req)
(let* ((path (url->string (request-uri req)))
@@ -71,6 +97,7 @@
)
(if (file-exists? file-to-serve)
(response/output
#:mime-type (string->bytes/utf-8 (mimetype-for-ext ext))
(λ (out)
(if (or (eq? ext 'html) (eq? ext 'htm))
(process-html wv-handle file-to-serve out)
@@ -95,7 +122,8 @@
#:servlet-path ""
#:stateless? #t
;#:launch-browser #f
#:servlet-regexp #rx""))))
#:servlet-regexp #rx"")
)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -106,6 +134,41 @@
(let ((wv-d0 (with-input-from-string evt read-json)))
wv-d0))
(define (webview-call-js-result? x)
(if (and (list? x) (= (length x) 2))
(and (symbol? (car x))
(string? (cadr x)))
#f))
(define-syntax with-id
(syntax-rules ()
((_ id el
(code ...))
(string-append (format "{ let ~a = document.getElementById('~a');\n" 'el id)
(format code ...)
"\n}")
)
((_ id el
(code ...) -> retval)
(string-append (format "{ let ~a = document.getElementById('~a');\n" 'el id)
(format code ...)
(format "return ~a;\n" retval)
"}"))
((_ id el -> retval)
(string-append (format "{ let ~a = document.getElementById('~a');\n" 'el id)
(format "return ~a;\n" retval)
"}"))
)
)
(define-syntax with-selector
(syntax-rules ()
((_ selector func)
(format "return window.rkt_with_selector('~a', ~a)"
(esc-quote selector)
func))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Webview functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -130,30 +193,75 @@
(set! current-servlet-port (+ current-servlet-port 1))
h))
(define (webview-devtools wv)
(define/contract (webview-devtools wv)
(-> wv? symbol?)
(rkt-webview-open-devtools (wv-handle wv)))
(define (webview-move wv x y)
(define/contract (webview-move wv x y)
(-> wv? number? number? symbol?)
(rkt-webview-move (wv-handle wv) x y))
(define (webview-resize wv w h)
(define/contract (webview-resize wv w h)
(-> wv? number? number? symbol?)
(rkt-webview-resize (wv-handle wv) w h))
(define (webview-close wv)
(rkt-webview-close (wv-handle wv))
(kill-thread (wv-webserver-thread wv))
(define/contract (webview-set-html! wv html)
(-> wv? (or/c string? xexpr?) symbol?)
(if (string? html)
(rkt-webview-set-html! (wv-handle wv) html)
(rkt-webview-set-html! (wv-handle wv) (xexpr->string html))
)
)
(define/contract (webview-set-url! wv url)
(-> wv? (or/c string? url?) symbol?)
(if (url? url)
(rkt-webview-set-url! (wv-handle wv) (url->string url))
(rkt-webview-set-url! (wv-handle wv) url)
)
)
(define-syntax def-win-func
(syntax-rules ()
((_ name name-to-wrap)
(define/contract (name wv)
(-> wv? symbol?)
(name-to-wrap (wv-handle wv))))))
(def-win-func webview-show rkt-webview-show)
(def-win-func webview-hide rkt-webview-hide)
(def-win-func webview-maximize rkt-webview-maximize)
(def-win-func webview-minimize rkt-webview-minimize)
(def-win-func webview-show-normal rkt-webview-show-normal)
(def-win-func webview-present rkt-webview-present)
(def-win-func webview-window-state rkt-webview-window-state)
(define/contract (webview-set-title! wv title)
(-> wv? string? symbol?)
(rkt-webview-set-title! (wv-handle wv) title))
(define/contract (webview-close wv)
(-> wv? symbol?)
(let ((r (rkt-webview-close (wv-handle wv))))
(kill-thread (wv-webserver-thread wv))
r)
)
(define (webview-bind! wv selector event)
(define/contract (webview-bind! wv selector event)
(-> wv? (or/c symbol? string?) symbol? list?)
(let ((sel (if (symbol? selector)
(format "#~a" selector)
selector))
(evt (format "~a" event)))
(webview-run-js wv
(format "window.rkt_bind_evt_ids(~a, '~a', '~a')"
(wv-window-nr wv) sel evt))))
(let ((r (webview-call-js wv
(format "return window.rkt_bind_evt_ids(~a, '~a', '~a')"
(wv-window-nr wv) sel evt))))
(map (λ (el)
(list (string->symbol (car el)) (cadr el) (caddr el)))
r))))
(define (webview-run-js wv js)
(define/contract (webview-run-js wv js)
(-> wv? string? symbol?)
(rkt-webview-run-js (wv-handle wv) js))
(define (webview-standard-file-getter base-path
@@ -168,9 +276,166 @@
(on-not-exist file base-path p)
p)))))
(define (webview-call-js wv js)
(let ((result (rkt_webview_call_js (wv-handle wv) js)))
result))
(-> wv? string? (or/c string? list? boolean? hash?))
(let ((result (rkt-webview-call-js (wv-handle wv) js)))
(if (webview-call-js-result? result)
(if (eq? (car result) 'oke)
(hash-ref (fromJson (cadr result)) 'result #f)
(error "Error calling javascript. Message: ~a" (hash-ref (fromJson (cadr result)) 'exn result))
)
(error "Wrong result from webview-call-js: ~a" result)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions on top of the basics
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define/contract (webview-set-innerHTML! wv id html)
(-> wv? symbol? (or/c string? xexpr?) symbol?)
(if (string? html)
(webview-run-js wv
(with-id id el
("el.innerHTML = '~a';" (esc-quote html))))
(webview-set-innerHTML! wv id (xexpr->string html))
)
)
(define/contract (webview-set-value! wv id val)
(-> wv? symbol? (or/c symbol? string? number? boolean?) symbol?)
(webview-run-js wv
(with-id id el
((string-append
"if (el.type == 'checkbox' || el.type == 'radio') {\n"
" el.checked = ~a;\n"
"} else {\n"
" el.value = '~a';\n"
"}")
(if (eq? val #f) "false" "true")
(esc-quote (format "~a" val))))
)
)
(define/contract (webview-value wv id)
(-> wv? symbol? (or/c string? boolean?))
(let ((v (webview-call-js wv
(with-id id el
((string-append "let f = function() {\n"
" if (el.type == 'checkbox' || el.type == 'radio') {\n"
" return '' + el.checked;\n"
" } else {\n"
" return el.value;\n"
" }\n"
"};\n"))
-> "f()"))))
(if (eq? (car v) 'oke)
(let ((h (fromJson (cadr v))))
(hash-ref h 'result #f))
#f)
)
)
(define/contract (webview-value/number wv id)
(-> wv? symbol? (or/c number? boolean?))
(let ((v (webview-value wv id)))
(if (eq? v #f)
#f
(string->number (webview-value wv id)))))
(define/contract (webview-value/symbol wv id)
(-> wv? symbol? (or/c symbol? boolean?))
(let ((v (webview-value wv id)))
(if (eq? v #f)
#f
(string->symbol (webview-value wv id)))))
(define/contract (webview-value/bool wv id)
(-> wv? symbol? (or/c symbol? boolean?))
(let ((v (webview-value wv id)))
(if (eq? v #f)
'fail
(if (string=? (webview-value wv id) "true")
#t
#f))))
(define/contract (webview-add-class! wv id-or-selector class)
(-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?)
(let ((sel (if (symbol? id-or-selector)
(format "#~a" id-or-selector)
id-or-selector))
(cl (mk-js-array class))
)
(webview-call-js wv (with-selector sel
(format
(js-code
"function(id, el) {"
" let cl = ~a;"
" cl.forEach(function(c) {"
" el.classList.add(c);"
" });"
" return id;"
"}") cl)))
)
)
(define/contract (webview-remove-class! wv id-or-selector class)
(-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?)
(let ((sel (if (symbol? id-or-selector)
(format "#~a" id-or-selector)
id-or-selector))
(cl (mk-js-array class))
)
(webview-call-js wv
(with-selector sel
(format
(js-code
"function(id, el) {"
" let cl = ~a;"
" cl.forEach(function(c) {"
" el.classList.remove(c);"
" });"
" return id;"
"}") cl))
)
)
)
(define/contract (webview-set-style! wv selector style-entries)
(-> wv? (or/c symbol? string?) (or/c list? list-of-kv?) hash?)
(define (webview-set-style!* wv selector h)
(list wv selector h))
(define-syntax webview-style-entry
(syntax-rules ()
((_ h (k v))
(with-handlers ([exn:fail? (λ (e)
(hash-set! h 'k v))])
(hash-set! h k v)))
((_ h q l)
(hash-set! h (car l) (cadr l)))
((_ h l)
(hash-set! h (car l) (cadr l)))
)
)
(define-syntax webview-set-style!
(syntax-rules ()
((_ wv selector st ...)
(webview-set-style!* wv selector
(let ((h (make-hash)))
(webview-style-entry h st)
...
h))
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; testing
@@ -184,6 +449,10 @@
(let* ((cb (λ (handle evt)
(displayln evt)))
(h (webview-create file-getter cb)))
(webview-set-title! h "This is a test window")
(webview-resize h 800 600)
(webview-move h 350 220)
;(webview-present h)
h))

View File

@@ -1,10 +1,20 @@
#lang racket/base
(require racket/string
racket/port
json
)
(provide while
until
get-lib-path
do-for
esc-quote
esc-double-quote
fromJson
mk-js-array
js-code
list-of-kv?
)
(define-syntax while
@@ -61,4 +71,47 @@
[else
(error (format "Install the shared library: ~a" lib))]
)))
(define (esc-quote str)
(string-replace str "'" "\\'"))
(define (esc-double-quote str)
(string-replace str "\"" "\\\""))
(define (fromJson str)
(with-input-from-string str read-json))
(define (mk-js-array l)
(if (list? l)
(string-append "[ " (string-join (map (λ (e) (format "'~a'"
(esc-quote (format "~a" e)))) l) ", ") " ]")
(format "[ '~a' ]" (esc-quote (format "~a" l)))
)
)
(define (js-code . a)
(define (code* l)
(if (null? l)
""
(string-append (car l) "\n" (code* (cdr l)))
)
)
(code* a))
(define (list-of-kv? l)
(define (kv? e)
(let ((e (car l)))
(and (list? e)
(= (length e) 2)
(symbol? (car e)))))
(define (all-kv? l)
(if (null? l)
#t
(if (kv? (car e))
(all-kv? (cdr l))
#f)))
(if (list? l)
(all-kv? l)
#f))

View File

@@ -21,7 +21,9 @@ int main(int argc, char *argv[])
rkt_webview_init();
wv1 = rkt_webview_create(0, eventCb);
rkt_webview_set_url(wv1, "https://wikipedia.org");
rkt_webview_move(wv1, 200, 300);
rkt_webview_resize(wv1, 800, 600);
rkt_webview_set_url(wv1, "http://127.0.0.1:8083");
int i = 0;
while(i < 60) {
@@ -50,6 +52,9 @@ int main(int argc, char *argv[])
if (i == 10) {
wv2 = rkt_webview_create(0, eventCb);
rkt_webview_move(wv2, 400, 200);
rkt_webview_resize(wv2, 800, 600);
rkt_webview_set_url(wv2, "https://127.0.0.1");
}
if (i > 10) {

View File

@@ -29,6 +29,7 @@ void rkt_webview_init()
{
if (handler == nullptr) {
handler = new Rktwebview_qt(&handler);
handler->doEvents();
}
}
@@ -135,4 +136,51 @@ bool rkt_webview_valid(rktwebview_t wv)
return handler->rktValid(wv);
}
result_t rkt_webview_hide(rktwebview_t w)
{
rkt_webview_init();
return handler->rktHideWindow(w);
}
result_t rkt_webview_show(rktwebview_t w)
{
rkt_webview_init();
return handler->rktShowWindow(w);
}
result_t rkt_webview_present(rktwebview_t w)
{
rkt_webview_init();
return handler->rktPresentWindow(w);
}
result_t rkt_webview_maximize(rktwebview_t w)
{
rkt_webview_init();
return handler->rktMaximizeWindow(w);
}
result_t rkt_webview_minimize(rktwebview_t w)
{
rkt_webview_init();
return handler->rktMinimizeWindow(w);
}
result_t rkt_webview_show_normal(rktwebview_t w)
{
rkt_webview_init();
return handler->rktShowNormalWindow(w);
}
window_state_t rkt_webview_window_state(rktwebview_t w)
{
rkt_webview_init();
return handler->rktWindowState(w);
}
result_t rkt_webview_set_title(rktwebview_t wv, const char *title)
{
rkt_webview_init();
return handler->rktWindowSetTitle(wv, title);
}

View File

@@ -37,7 +37,15 @@ typedef struct {
char *value;
} rkt_js_result_t;
typedef enum {
invalid = -1,
normal = 0,
minimized = 1,
maximized = 2,
hidden = 3,
normal_active = 16,
maximized_active = 18
} window_state_t;
RKTWEBVIEW_QT_EXPORT void rkt_webview_init();
RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms);
@@ -45,6 +53,7 @@ RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms);
RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb);
RKTWEBVIEW_QT_EXPORT void rkt_webview_close(rktwebview_t wv);
RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_url(rktwebview_t wv, const char *url);
@@ -60,6 +69,13 @@ RKTWEBVIEW_QT_EXPORT result_t rkt_webview_destroy_event(rkt_event_t *e);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_move(rktwebview_t w, int x, int y);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_resize(rktwebview_t w, int width, int height);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_hide(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show_normal(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_present(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_maximize(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_minimize(rktwebview_t w);
RKTWEBVIEW_QT_EXPORT window_state_t rkt_webview_window_state(rktwebview_t w);
}

View File

@@ -8,17 +8,26 @@
#include <QSemaphore>
#include <QJsonDocument>
#include <QJsonObject>
#include <QAbstractEventDispatcher>
#define COMMAND_QUIT 1
#define COMMAND_CLOSE 2
#define COMMAND_CREATE 3
#define COMMAND_SET_URL 4
#define COMMAND_SET_HTML 5
#define COMMAND_RUN_JS 6
#define COMMAND_DEV_TOOLS 7
#define COMMAND_MOVE 8
#define COMMAND_RESIZE 9
#define COMMAND_CALL_JS 10
#define COMMAND_QUIT 1
#define COMMAND_CLOSE 2
#define COMMAND_CREATE 3
#define COMMAND_SET_URL 4
#define COMMAND_SET_HTML 5
#define COMMAND_RUN_JS 6
#define COMMAND_DEV_TOOLS 7
#define COMMAND_MOVE 8
#define COMMAND_RESIZE 9
#define COMMAND_CALL_JS 10
#define COMMAND_HIDE_WIN 11
#define COMMAND_SHOW_WIN 12
#define COMMAND_MAX_WIN 13
#define COMMAND_MIN_WIN 14
#define COMMAND_PRESENT_WIN 15
#define COMMAND_SHOW_NORMAL_WIN 16
#define COMMAND_WINDOW_STATUS 17
#define COMMAND_SET_TITLE 18
void Rktwebview_qt::processCommands()
{
@@ -54,12 +63,16 @@ void Rktwebview_qt::processCommands()
_view_js_callbacks[id] = js_event_cb;
w->show();
while(!w->windowCreated()) {
doEvents();
}
cmd->result = id;
cmd->done = true;
}
break;
case COMMAND_CLOSE: {
doEvents();
int wv = cmd->args[0].toInt();
if (_views.contains(wv)) {
WebviewWindow *w= _views[wv];
@@ -73,6 +86,7 @@ void Rktwebview_qt::processCommands()
}
break;
case COMMAND_SET_URL: {
doEvents();
int wv = cmd->args[0].toInt();
QString url = cmd->args[1].toString();
if (_views.contains(wv)) {
@@ -88,6 +102,7 @@ void Rktwebview_qt::processCommands()
}
break;
case COMMAND_SET_HTML: {
doEvents();
int wv = cmd->args[0].toInt();
QString html = cmd->args[1].toString();
if (_views.contains(wv)) {
@@ -101,7 +116,22 @@ void Rktwebview_qt::processCommands()
cmd->done = true;
}
break;
case COMMAND_SET_TITLE: {
doEvents();
int wv = cmd->args[0].toInt();
QString title = cmd->args[1].toString();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
w->setWindowTitle(title);
cmd->result = true;
} else {
cmd->result = false;
}
cmd->done = true;
}
break;
case COMMAND_RUN_JS: {
doEvents();
int wv = cmd->args[0].toInt();
QString js = cmd->args[1].toString();
if (_views.contains(wv)) {
@@ -115,6 +145,7 @@ void Rktwebview_qt::processCommands()
}
break;
case COMMAND_CALL_JS: {
doEvents();
int wv = cmd->args[0].toInt();
QString js = cmd->args[1].toString();
if (_views.contains(wv)) {
@@ -128,6 +159,7 @@ void Rktwebview_qt::processCommands()
}
break;
case COMMAND_DEV_TOOLS: {
doEvents();
int wv = cmd->args[0].toInt();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
@@ -139,13 +171,78 @@ void Rktwebview_qt::processCommands()
cmd->done = true;
}
break;
case COMMAND_SHOW_WIN:
case COMMAND_HIDE_WIN:
case COMMAND_PRESENT_WIN:
case COMMAND_MAX_WIN:
case COMMAND_MIN_WIN:
case COMMAND_SHOW_NORMAL_WIN:
{
doEvents();
int wv = cmd->args[0].toInt();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
int c = cmd->cmd;
if (c == COMMAND_SHOW_WIN) w->show();
else if (c == COMMAND_HIDE_WIN) w->hide();
else if (c == COMMAND_MAX_WIN) w->showMaximized();
else if (c == COMMAND_MIN_WIN) {
w->showMinimized();
}
else if (c == COMMAND_SHOW_NORMAL_WIN) w->showNormal();
else if (c == COMMAND_PRESENT_WIN) {
w->show();
w->raise();
w->activateWindow();
}
cmd->result = true;
} else {
cmd->result = false;
}
cmd->done = true;
}
break;
case COMMAND_WINDOW_STATUS:
{
doEvents();
int wv = cmd->args[0].toInt();
window_state_t ws = window_state_t::invalid;
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
if (w->isHidden()) {
ws = window_state_t::hidden;
} else if (w->isMinimized()) {
ws = window_state_t::minimized;
} else if (w->isMaximized()) {
if (w->isActiveWindow()) {
ws = window_state_t::maximized_active;
} else {
ws = window_state_t::maximized;
}
} else if (w->isVisible()) {
if (w->isActiveWindow()) {
ws = window_state_t::normal_active;
} else {
ws = window_state_t::normal;
}
}
}
cmd->result = static_cast<int>(ws);
cmd->done = true;
}
break;
case COMMAND_MOVE: {
doEvents();
int wv = cmd->args[0].toInt();
int x = cmd->args[1].toInt();
int y = cmd->args[2].toInt();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
int move_count = w->moveCount();
w->move(x, y);
while (w->moveCount() == move_count) {
doEvents();
}
cmd->result = true;
} else {
cmd->result = false;
@@ -154,12 +251,17 @@ void Rktwebview_qt::processCommands()
}
break;
case COMMAND_RESIZE: {
doEvents();
int wv = cmd->args[0].toInt();
int width = cmd->args[1].toInt();
int height = cmd->args[2].toInt();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
int resize_count = w->resizeCount();
w->resize(width, height);
while (w->resizeCount() == resize_count) {
doEvents();
}
cmd->result = true;
} else {
cmd->result = false;
@@ -312,6 +414,68 @@ result_t Rktwebview_qt::rktResize(rktwebview_t wv, int w, int h)
return r ? result_t::oke : result_t::resize_failed;
}
result_t Rktwebview_qt::rktHideWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_HIDE_WIN);
}
result_t Rktwebview_qt::rktShowWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_SHOW_WIN);
}
result_t Rktwebview_qt::rktPresentWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_PRESENT_WIN);
}
result_t Rktwebview_qt::rktMaximizeWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_MAX_WIN);
}
result_t Rktwebview_qt::rktMinimizeWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_MIN_WIN);
}
result_t Rktwebview_qt::rktShowNormalWindow(rktwebview_t w)
{
return doWindow(w, COMMAND_SHOW_NORMAL_WIN);
}
window_state_t Rktwebview_qt::rktWindowState(rktwebview_t w)
{
Command c(COMMAND_WINDOW_STATUS);
c.args.push_back(w);
_command_queue.enqueue(&c);
while(!c.done) { doEvents(); }
int r = c.result.toInt();
window_state_t ws = static_cast<window_state_t>(r);
return ws;
}
result_t Rktwebview_qt::rktWindowSetTitle(rktwebview_t wv, const char *title)
{
Command c(COMMAND_SET_TITLE);
c.args.push_back(wv);
c.args.push_back(title);
_command_queue.enqueue(&c);
while(!c.done) { doEvents(); }
bool r = c.result.toBool();
return r ? result_t::oke : result_t::resize_failed;
}
result_t Rktwebview_qt::doWindow(rktwebview_t w, int cmd)
{
Command c(cmd);
c.args.push_back(w);
_command_queue.enqueue(&c);
while(!c.done) { doEvents(); }
bool r = c.result.toBool();
return r ? result_t::oke : result_t::resize_failed;
}
bool Rktwebview_qt::rktValid(rktwebview_t wv)
{
return _views.contains(wv);
@@ -415,5 +579,13 @@ Rktwebview_qt::Rktwebview_qt(Rktwebview_qt **handler) :
connect(&_process_events, &QTimer::timeout, this, &Rktwebview_qt::processJsEventQueues);
_process_events.start(5);
const auto *eventDispatcher = QThread::currentThread()->eventDispatcher();
QObject::connect(eventDispatcher, &QAbstractEventDispatcher::aboutToBlock,
QThread::currentThread(), []{
if (QThread::currentThread()->loopLevel() == 0)
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
}
);
*_handler = nullptr;
}

View File

@@ -38,6 +38,7 @@ private:
private:
void runJs(rktwebview_t wv, const char *js);
result_t doWindow(rktwebview_t w, int cmd);
public slots:
void processCommands();
@@ -58,8 +59,19 @@ public:
result_t rktSetHtml(rktwebview_t wv, const char *html);
result_t rktRunJs(rktwebview_t wv, const char *js);
rkt_js_result_t *rktCallJs(rktwebview_t wv, const char *js);
result_t rktMove(rktwebview_t wv, int x, int y);
result_t rktResize(rktwebview_t wv, int w, int h);
result_t rktHideWindow(rktwebview_t w);
result_t rktShowWindow(rktwebview_t w);
result_t rktPresentWindow(rktwebview_t w);
result_t rktMaximizeWindow(rktwebview_t w);
result_t rktMinimizeWindow(rktwebview_t w);
result_t rktShowNormalWindow(rktwebview_t w);
window_state_t rktWindowState(rktwebview_t w);
result_t rktWindowSetTitle(rktwebview_t wv, const char *title);
bool rktValid(rktwebview_t wv);
public:

View File

@@ -20,6 +20,10 @@ WebviewWindow::WebviewWindow(QWidget *parent)
_devtools = nullptr;
_window_created = false;
_moved = 0;
_resized = 0;
connect(&_resize_timer, &QTimer::timeout, this, &WebviewWindow::triggerResize);
connect(&_move_timer, &QTimer::timeout, this, &WebviewWindow::triggerMove);
}
@@ -74,6 +78,21 @@ void WebviewWindow::closeView()
close();
}
bool WebviewWindow::windowCreated()
{
return _window_created;
}
int WebviewWindow::moveCount()
{
return _moved;
}
int WebviewWindow::resizeCount()
{
return _resized;
}
void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c)
{
_container = c;
@@ -174,6 +193,7 @@ void WebviewWindow::moveEvent(QMoveEvent *event)
_y = event->pos().y();
_move_timer.setSingleShot(true);
_move_timer.start(500);
_moved += 1;
}
void WebviewWindow::triggerMove()
@@ -190,6 +210,7 @@ void WebviewWindow::resizeEvent(QResizeEvent *event)
_h = event->size().height();
_resize_timer.setSingleShot(true);
_resize_timer.start(500);
_resized += 1;
}
void WebviewWindow::triggerResize()
@@ -202,6 +223,7 @@ void WebviewWindow::triggerResize()
void WebviewWindow::showEvent(QShowEvent *event)
{
_window_created = true;
EventContainer show("show");
_container->triggerEvent(_view->id(), show);
}

View File

@@ -25,6 +25,10 @@ private:
int _h;
bool _must_close;
bool _window_created;
int _moved;
int _resized;
public slots:
void processJsEvents();
@@ -33,6 +37,9 @@ protected:
public:
void closeView();
bool windowCreated();
int moveCount();
int resizeCount();
public:
void addView(WebViewQt *v, Rktwebview_qt *c);