parent
f7bda63625
commit
431618aea0
|
@ -25,136 +25,16 @@
|
|||
! asynchronous requests back to the server.
|
||||
!
|
||||
IN: live-updater-responder
|
||||
USE: live-updater
|
||||
USE: namespaces
|
||||
USE: cont-html
|
||||
USE: html
|
||||
USE: cont-responder
|
||||
USE: cont-utils
|
||||
USE: stack
|
||||
USE: stdio
|
||||
USE: namespaces
|
||||
USE: streams
|
||||
USE: lists
|
||||
USE: strings
|
||||
USE: kernel
|
||||
USE: vocabularies
|
||||
|
||||
: get-live-updater-js* ( stream -- string )
|
||||
#! Read all lines from the stream, creating a string of the result.
|
||||
dup freadln dup [ % "\n" % get-live-updater-js* ] [ drop fclose ] ifte ;
|
||||
|
||||
: get-live-updater-js ( filename -- string )
|
||||
#! Return the liveUpdater javascript code as a string.
|
||||
<filecr> <% get-live-updater-js* %> ;
|
||||
|
||||
: write-live-anchor-tag ( text -- id )
|
||||
#! Write out the HTML for the clickable anchor. This
|
||||
#! will have no actionable HREF assigned to it. Instead
|
||||
#! an onclick is set via DHTML later to make it run a
|
||||
#! quotation on the server. The randomly generated id
|
||||
#! for the anchor is returned.
|
||||
<a id= get-random-id dup href= "#" a> [
|
||||
swap write
|
||||
] </a> ;
|
||||
|
||||
: register-live-anchor-quot ( div-id div-quot -- kid )
|
||||
#! Register the 'quot' with the cont-responder so
|
||||
#! that when it is run it will produce an HTML
|
||||
#! fragment which is the output generated by calling
|
||||
#! 'quot'. That HTML fragment will be wrapped in a
|
||||
#! 'div' with the given id.
|
||||
<namespace> [
|
||||
"div-quot" set
|
||||
"div-id" set
|
||||
] extend [
|
||||
[
|
||||
t "disable-initial-redirect?" set
|
||||
[
|
||||
<div id= "div-id" get div> [ "div-quot" get call ] </div>
|
||||
] show
|
||||
] bind
|
||||
] cons t swap register-continuation ;
|
||||
|
||||
: write-live-anchor-script ( div-id div-quot anchor-id -- )
|
||||
#! Write the javascript that will attach the onclick
|
||||
#! event handler to the anchor with the 'anchor-id'. The
|
||||
#! onclick, when clicked, will retrieve from the server
|
||||
#! the HTML generated by the output of 'div-quot' wrapped
|
||||
#! in a 'div' tag with the 'div-id'. That 'div' tag will
|
||||
#! replace whatever HTML DOM object currently has that same
|
||||
#! id.
|
||||
<script language= "JavaScript" script> [
|
||||
"document.getElementById('" write
|
||||
write
|
||||
"').onclick=liveUpdaterUri('" write
|
||||
register-live-anchor-quot write
|
||||
"');" write
|
||||
] </script> ;
|
||||
|
||||
: live-anchor ( id quot text -- )
|
||||
#! Write out the HTML for an anchor that when clicked
|
||||
#! will replace the DOM object on the current page with
|
||||
#! the given 'id' with the result of the output of calling
|
||||
#! 'quot'.
|
||||
write-live-anchor-tag
|
||||
write-live-anchor-script ;
|
||||
|
||||
: write-live-search-tag ( -- id )
|
||||
#! Write out the HTML for the input box. This
|
||||
#! will have no actionable keydown assigned to it. Instead
|
||||
#! a keydown is set via DHTML later to make it run a
|
||||
#! quotation on the server. The randomly generated id
|
||||
#! for the input box is returned.
|
||||
<input id= get-random-id dup type= "text" input/> ;
|
||||
|
||||
: register-live-search-quot ( div-id div-quot -- kid )
|
||||
#! Register the 'quot' with the cont-responder so
|
||||
#! that when it is run it will produce an HTML
|
||||
#! fragment which is the output generated by calling
|
||||
#! 'quot'. That HTML fragment will be wrapped in a
|
||||
#! 'div' with the given id. The 'quot' is called with
|
||||
#! a string on top of the stack. This is the input string
|
||||
#! entered in the live search input box.
|
||||
<namespace> [
|
||||
"div-quot" set
|
||||
"div-id" set
|
||||
] extend [
|
||||
[
|
||||
t "disable-initial-redirect?" set
|
||||
#! Retrieve the search query value from the POST parameters.
|
||||
[ "s" get ] bind
|
||||
[
|
||||
#! Don't need the URL as the 'show' won't be resumed.
|
||||
drop
|
||||
<div id= "div-id" get div> [ "div-quot" get call ] </div>
|
||||
] show
|
||||
] bind
|
||||
] cons t swap register-continuation ;
|
||||
|
||||
: write-live-search-script ( div-id div-quot id-id -- )
|
||||
#! Write the javascript that will attach the keydown handler
|
||||
#! to the input box with the give id. Whenever a keydown is
|
||||
#! received the 'div-quot' will be executed on the server,
|
||||
#! with the input boxes text on top of the stack. The
|
||||
#! output of the quot will be an HTML fragment, it is wrapped in
|
||||
#! a 'div' with the id 'div-id' and will
|
||||
#! replace whatever HTML DOM object currently has that same
|
||||
#! id.
|
||||
<script language= "JavaScript" script> [
|
||||
"liveSearch('" write
|
||||
write
|
||||
"', '" write
|
||||
register-live-search-quot write
|
||||
"');" write
|
||||
] </script> ;
|
||||
|
||||
: live-search ( div-id div-quot -- )
|
||||
#! Write an input text field. The keydown of this
|
||||
#! text field will run 'div-quot' on the server with
|
||||
#! the value of the text field on the stack. The output
|
||||
#! of div-quot will replace the HTML DOM object with the
|
||||
#! given id.
|
||||
write-live-search-tag
|
||||
write-live-search-script ;
|
||||
USE: stdio
|
||||
USE: stack
|
||||
USE: kernel
|
||||
USE: cont-utils
|
||||
USE: cont-responder
|
||||
|
||||
: live-search-apropos-word ( string -- )
|
||||
#! Given a string that is a factor word, show the
|
||||
|
|
|
@ -41,8 +41,9 @@ USE: parser
|
|||
: l4 "cont-examples.factor" run-file ;
|
||||
: l5 "todo.factor" run-file ;
|
||||
: l6 "todo-example.factor" run-file ;
|
||||
: l7 "eval-responder.factor" run-file ;
|
||||
: l8 "live-updater-responder.factor" run-file ;
|
||||
: l7 "live-updater.factor" run-file ;
|
||||
: l8 "eval-responder.factor" run-file ;
|
||||
: l9 "live-updater-responder.factor" run-file ;
|
||||
: la ;
|
||||
: la [ 8888 httpd ] [ dup . flush [ la ] when* ] catch ;
|
||||
: lb [ la "httpd thread exited.\n" write flush ] in-thread ;
|
||||
|
|
Loading…
Reference in New Issue