html stream fixes, removing obsolete live updater code

cvs
Slava Pestov 2006-01-31 20:03:09 +00:00
parent 2acb28ae0c
commit 364856fe7f
5 changed files with 11 additions and 146 deletions

View File

@ -152,23 +152,17 @@ M: html-stream stream-format ( str style stream -- )
: with-html-stream ( quot -- ) : with-html-stream ( quot -- )
stdio get <html-stream> swap with-stream* ; stdio get <html-stream> swap with-stream* ;
: make-outliner-quot
[
<div "padding-left:10px;" =style div>
with-html-stream
</div>
] curry [ , \ show-final , ] [ ] make ;
: html-outliner ( caption contents -- ) : html-outliner ( caption contents -- )
<table "display: inline; " =style table> "+ " get-random-id dup >r
<tr> rot make-outliner-quot updating-anchor call
<td> <span r> =id span> </span> ;
"+" get-random-id dup >r rot [
with-html-stream
] curry [ , \ show-final , ] [ ] make updating-anchor
</td>
<td>
call
</td>
</tr>
<tr>
<td> </td>
<td> <div r> =id div> </td>
</tr>
</table> ;
: outliner-tag ( style quot -- ) : outliner-tag ( style quot -- )
outline pick hash [ html-outliner ] [ call ] if* ; outline pick hash [ html-outliner ] [ call ] if* ;

View File

@ -1,127 +0,0 @@
! Copyright (C) 2004 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
!
! cont-responder code for display forms and anchors that use
! XMLHttpRequest and the 'liveUpdater.js' code.
IN: live-updater
USING: cont-responder html io kernel lists namespaces strings
xml ;
: get-live-updater-js ( filename -- string )
#! Return the liveUpdater javascript code as a string.
"/contrib/httpd/liveUpdater.js" <resource-stream> contents ;
: include-live-updater-js ( -- )
#! Write out the HTML script to include the live updater
#! javascript code.
<script "JavaScript" =language script>
get-live-updater-js write-html
</script> ;
: 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 get-random-id dup =id "#" =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.
[
"div-quot" set
"div-id" set
] make-hash [
[
"disable-initial-redirect?" on
[
<div "div-id" get =id 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 "JavaScript" =language script>
"document.getElementById('" write-html
write-html
"').onclick=liveUpdaterUri('" write-html
register-live-anchor-quot id>url write-html
"');" write-html
</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 get-random-id dup =id "text" =type 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.
[
"div-quot" set
"div-id" set
] make-hash [
[
"disable-initial-redirect?" on
#! 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 "div-id" get =id 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 "JavaScript" =language script>
"liveSearch('" write
write
"', '" write
register-live-search-quot id>url 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 ;

View File

@ -1 +0,0 @@
/* liveUpdater.js originally written by Avi Bryant, author of Seaside (http://www.beta4.com/seaside2) Modifed by Chris Double to add LiveUpdaterPost and use ' instead of " for the id. */ function liveUpdaterUri(uri) { return liveUpdater(function() { return uri; }); } function liveUpdater(uriFunc) { var request = false; var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } function update() { if(request && request.readyState < 4) request.abort(); if(!window.XMLHttpRequest) request = new ActiveXObject("Microsoft.XMLHTTP"); request.onreadystatechange = processRequestChange; request.open("GET", uriFunc()); request.send(null); return false; } function processRequestChange() { if(request.readyState == 4) { var results = regex.exec(request.responseText); if(results) document.getElementById(results[2]).innerHTML = results[3]; } } return update; } function liveUpdaterPost(uriFunc) { var request = false; var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } function update(data) { if(request && request.readyState < 4) request.abort(); if(!window.XMLHttpRequest) request = new ActiveXObject("Microsoft.XMLHTTP"); request.onreadystatechange = processRequestChange; request.open("POST", uriFunc()); request.send(data); return false; } function processRequestChange() { if(request.readyState == 4) { var results = regex.exec(request.responseText); if(results) document.getElementById(results[2]).innerHTML = results[3]; } } return update; } function liveSearch(id, uri) { var updater = liveUpdaterPost((function() { return uri; })); var last = ""; var timeout = false; function update() { if (last != document.getElementById(id).value) updater("s=" + escape(document.getElementById(id).value)); } function start() { if (timeout) window.clearTimeout(timeout); timeout = window.setTimeout(update, 300); } if (navigator.userAgent.indexOf("Safari") > 0) document.getElementById(id).addEventListener("keydown",start,false); else if (navigator.product == "Gecko") document.getElementById(id).addEventListener("keypress",start,false); else document.getElementById(id).attachEvent("onkeydown",start); }

View File

@ -9,7 +9,6 @@ USING: words kernel parser sequences io compiler ;
"responder" "responder"
"httpd" "httpd"
"cont-responder" "cont-responder"
"live-updater"
"prototype-js" "prototype-js"
"html" "html"
"file-responder" "file-responder"

View File

@ -24,4 +24,4 @@ USING: io httpd cont-responder html kernel lists namespaces strings ;
#! call the given quotation on the server. The output generated #! call the given quotation on the server. The output generated
#! from that quotation will replace the DOM element on the page with #! from that quotation will replace the DOM element on the page with
#! the given id. The 'text' is the anchor text. #! the given id. The 'text' is the anchor text.
<a "#" =href updating-javascript =onclick a> write </a> ; <a updating-javascript =onclick a> write </a> ;