@@ -14,7 +14,7 @@ const piperObservable = rxjs.defer(() => {
1414 rxjs . shareReplay ( { bufferSize : 1 , refCount : false } )
1515 )
1616const piperCallbacks = new rxjs . Subject ( )
17- const domDispatcher = makeDispatcher ( "piper-host" , {
17+ const piperDispatcher = makeDispatcher ( "piper-host" , {
1818 advertiseVoices ( { voices} , sender ) {
1919 updateSettings ( { piperVoices : voices } )
2020 piperSubject . next ( sender )
@@ -25,16 +25,42 @@ const domDispatcher = makeDispatcher("piper-host", {
2525 onEnd : args => piperCallbacks . next ( { type : "end" , ...args } ) ,
2626 onError : args => piperCallbacks . next ( { type : "error" , ...args } ) ,
2727} )
28+
29+
30+ const fasttextSubject = new rxjs . Subject ( )
31+ const fasttextObservable = rxjs . defer ( ( ) => {
32+ createFasttextFrame ( )
33+ return fasttextSubject
34+ } )
35+ . pipe (
36+ rxjs . startWith ( null ) ,
37+ rxjs . shareReplay ( { bufferSize : 1 , refCount : false } )
38+ )
39+ const fasttextDispatcher = makeDispatcher ( "fasttext-host" , {
40+ onServiceReady ( args , sender ) {
41+ fasttextSubject . next ( sender )
42+ }
43+ } )
44+
45+
2846window . addEventListener ( "message" , event => {
2947 const send = message => event . source . postMessage ( message , { targetOrigin : event . origin } )
30- const sender = {
48+
49+ piperDispatcher . dispatch ( event . data , {
3150 sendRequest ( method , args ) {
3251 const id = String ( Math . random ( ) )
33- send ( { to : "piper-service" , type : "request" , id, method, args} )
34- return domDispatcher . waitForResponse ( id )
52+ send ( { from : "piper-host" , to : "piper-service" , type : "request" , id, method, args} )
53+ return piperDispatcher . waitForResponse ( id )
3554 }
36- }
37- domDispatcher . dispatch ( event . data , sender , send )
55+ } , send )
56+
57+ fasttextDispatcher . dispatch ( event . data , {
58+ sendRequest ( method , args ) {
59+ const id = String ( Math . random ( ) )
60+ send ( { from : "fasttext-host" , to : "fasttext-service" , type : "request" , id, method, args} )
61+ return fasttextDispatcher . waitForResponse ( id )
62+ }
63+ } , send )
3864} )
3965
4066
@@ -346,3 +372,12 @@ function createPiperFrame() {
346372 f . style . borderWidth = "0"
347373 document . body . appendChild ( f )
348374}
375+
376+ function createFasttextFrame ( ) {
377+ const f = document . createElement ( "iframe" )
378+ f . id = "fasttext-frame"
379+ f . src = "https://ttstool.com/fasttext/index.html"
380+ f . allow = "cross-origin-isolated"
381+ f . style . display = "none"
382+ document . body . appendChild ( f )
383+ }
0 commit comments